UDP打洞

2024-06-21

我有一些关于 UDP 打洞的问题。基于维基百科http://en.wikipedia.org/wiki/UDP_hole_punching http://en.wikipedia.org/wiki/UDP_hole_punching

1)要在两方(NAT 后面的客户端,非 NAT 的服务器)之间建立 UDP 会话,客户端只需向服务器发送一个数据包,然后允许双向会话(发送和接收) )通过防火墙?这意味着客户端也可以从服务器接收。

2) UDP 打洞:两个客户端首先连接到服务器,然后服务器将客户端端口/IP 提供给其他客户端,以便客户端在这些端口上相互发送数据包。它是否正确?

3) 如果#2 为真,为什么防火墙允许从另一个 IP 接收数据,而不是在该端口上建立连接所使用的 IP?听起来像是一个应该很容易过滤的大安全漏洞?我知道源 IP 欺骗会欺骗它,但是这个呢?

提前致谢, 约翰


1)是的,使用最合理的防火墙,除非您以极其偏执的模式配置它。

2)不完全是。本文 http://www.brynosaurus.com/pub/net/p2pnat/更详细地解释了它,但其想法是,其中一个客户端首先向另一个客户端的公共 IP 发送数据报。然后这个数据报被丢弃,但另一个客户端知道它已被发送,因为第一个客户端通过服务器告诉它。然后,另一个客户端将数据报发送回第一个客户端,该端口与第一个数据报源自的端口相同。由于第一个客户端的 NAT 会记住有来自该端口的数据包,因此它认为传入的数据报是对第一个数据报的回复。这里的问题是弄清楚 NAT 将选择哪个公共端口发送第一个数据报,但大多数 NAT 以可预测的方式执行此操作,因此它几乎总是工作正常,有时只是不是从第一次尝试开始。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UDP打洞 的相关文章

  • 如何在 C++ 中的文件末尾添加数据?

    我已按照网上的说明进行操作 此代码应该将输入添加到文件 数据库 的末尾 但当我检查时 数据会覆盖现有数据 请帮忙 这是我的代码 int main string name string address string handphone cou
  • 如何使用MemoryCache代替Timer来触发一个方法?

    以下方法通过等待已运行操作的结果来处理并发请求 对数据的请求可能会使用相同 不同的凭据同时出现 对于每组唯一的凭据 最多可以有一个GetCurrentInternal呼叫正在进行中 当准备就绪时 该呼叫的结果将返回给所有排队的服务员 pri
  • 使用 Unity 在构造函数中使用属性依赖注入

    好的 我在基类中定义了一个依赖属性 我尝试在其派生类的构造函数内部使用它 但这不起作用 该属性显示为 null Unity 在使用 container Resolve 解析实例后解析依赖属性 我的另一种选择是将 IUnityContaine
  • std::cout 和 std::wcout 有什么区别?

    在c 中 有什么区别std cout and std wcout 它们都控制流缓冲区的输出或将内容打印到控制台 或者它们只是相似吗 它们作用于不同的字符类型 std cout uses char作为字符类型 std wcout uses w
  • C++ 中本地类中的静态成员变量?

    我知道我们不能宣布static本地类中的成员变量 但其原因尚不清楚 那么请问有人可以解释一下吗 另外 为什么我们不能访问非static函数内部定义的变量 内部已经定义了局部类 直接在局部类成员函数中 在下面给出的代码中 int main i
  • 为 Visual Studio 2013 编译 Tesseract

    我正在尝试使用tesseract在 Visual Studio 2013 中 我在链接器 gt 输入 不是 libtesseract302 static lib 中使用 libtesseract302 lib 一切都正常 并且已编译并运行
  • 向 Nhibernate 发出 SQL 查询

    如何将此 SQL 查询发送给 Nhibernate SELECT Customer name FROM Company INNER JOIN Customer ON Company CompanyId Customer CompanyId
  • 启动时出现 OData v4 错误:找不到段“Whatever”的资源

    我正在构建新的 v4 服务 一切进展顺利 直到我为新模型 实体添加了新控制器 并在启动站点进行测试运行时收到此错误 控制器似乎编码正确 就像其他控制器一样 控制器 CustomersOData 中的操作 GetFeed 上的路径模板 Cus
  • 推导指南中的引用和值之间的差异

    考虑类型A template
  • 在 Unity 进程和另一个 C# 进程之间进行本地 IPC 的最快方法 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我希望每秒大约 30 次从 C 应用程序向我的 Unity 应用程序传送大量数据 由于 Unity 不支持映射内存和管道 我考虑了 t
  • XamlReader.Load 在后台线程中。是否可以?

    WPF 应用程序具有从单独的文件加载用户控件的操作 使用XamlReader Load method StreamReader mysr new StreamReader pathToFile DependencyObject rootOb
  • C++中的类查找结构体数组

    我正在尝试创建一个结构数组 它将输入字符串链接到类 如下所示 struct string command CommandPath cPath cPathLookup set an alarm AlarmCommandPath send an
  • 在一个字节中存储 4 个不同的值

    我有一个任务要做 但我不知道从哪里开始 我不期待也绝对不想要代码中的答案 我想要一些关于该怎么做的指导 因为我感到有点失落 将变量打包和解包到一个字节中 您需要在一个字节中存储 4 个不同的值 这些值为 NAME RANGE BITS en
  • PlaySound 可在 Visual Studio 中运行,但不能在独立 exe 中运行

    我正在尝试使用 Visual Studio 在 C 中播放 wav 文件 我将文件 my wav 放入项目目录中并使用代码 PlaySound TEXT my wav NULL SND FILENAME SND SYNC 我按下播放按钮 或
  • C++:.bmp 到文件中的字节数组

    是的 我已经解决了与此相关的其他问题 但我发现它们没有太大帮助 他们提供了一些帮助 但我仍然有点困惑 所以这是我需要做的 我们有一个 132x65 的屏幕 我有一个 132x65 的 bmp 我想遍历 bmp 并将其分成小的 1x8 列以获
  • 用于 C# 的 TripleDES IV?

    所以当我说这样的话 TripleDES tripledes TripleDES Create Rfc2898DeriveBytes pdb new Rfc2898DeriveBytes password plain tripledes Ke
  • 为什么在setsid()之前fork()

    Why fork before setsid 守护进程 基本上 如果我想将一个进程与其控制终端分离并使其成为进程组领导者 我使用setsid 之前没有分叉就这样做是行不通的 Why 首先 setsid 将使您的进程成为进程组的领导者 但它也
  • 有没有办法强制显示工具提示?

    我有一个验证字段的方法 如果无法验证 该字段将被清除并标记为红色 我还希望在框上方弹出一个工具提示 并向用户显示该值无效的消息 有没有办法做到这一点 并且可以控制工具提示显示的时间 我怎样才能让它自己弹出而不是鼠标悬停时弹出 If the
  • 检查Windows控制台中是否按下了键[重复]

    这个问题在这里已经有答案了 可能的重复 C 控制台键盘事件 https stackoverflow com questions 2067893 c console keyboard events 我希望 Windows 控制台程序在按下某个
  • 当另一个线程可能设置共享布尔标志(最多一次)时,是否可以读取共享布尔标志而不锁定它?

    我希望我的线程能够更优雅地关闭 因此我尝试实现一个简单的信号机制 我不认为我想要一个完全事件驱动的线程 所以我有一个工作人员有一种方法可以使用关键部分优雅地停止它Monitor 相当于C lock我相信 绘图线程 h class Drawi

随机推荐

  • 关于结构的警告 C26495?

    过去一两年我一直在使用 C NET 但正在为客户更新旧的 C MFC 应用程序 我知道自从我上次使用 C 以来发生了很多变化 但这件事让我感到震惊 我有以下结构 typedef struct FILTERINFO int nCustomer
  • Open Layers 3 根据矢量图层的范围将地图居中?

    我想根据矢量图层特征 点 来定位地图的中心和缩放级别 我有一个 geojson 文件正在填充我的地图 var vectorSource new ol source Vector url assets js data geojson form
  • 仅在代码的某些部分记录打印两次

    我一直在使用自定义格式化程序在代码中登录到终端 最近我一直在更改代码中的内容 但我找不到为什么现在在代码的某些部分日志被打印两次 这是自定义格式化程序的代码 import logging class MyFormatter logging
  • _bstr_t 内存泄漏

    我有一个 C 代码 但它没有正确释放内存 告诉我哪里错了 这是我的代码 1 void MyClass MyFunction void 2 3 for int i 0 i
  • Scala:解决“非法循环引用”

    我正在尝试实现一个基于 HashMap 的树 它支持给定根键的 O 1 子树查找 为了实现这个目标 我正在努力做到以下几点 scala gt type Q HashMap Char Q
  • 始终保持 TreeSet 中可变对象的排序

    我注意到 如果稍后更改对象属性值 TreeSet 不会按排序顺序保留可变对象 例如 public class Wrap static TreeSet
  • 带有 `$q` 的 AngularJS 执行顺序 -- 链接 Promises

    以下方法有效 q when then checkCookieToken check if cookie already exists e g in cookie then setHeader set Header with REST Tok
  • 如何在 MySQL 查询本身中检索 JSON 数组中存储的值?

    我有下表 product id product name image path misc 1 flex http firstpl course level id 19 group id 40067 2 Android http firstp
  • Excel文件下载在使用exceljs的node.js中不起作用

    大家好 我是 MEAN Stack 的新手 我想在单击导出按钮时下载 Excel 文件 我正在使用此参考链接下载 Excel 文件 https www npmjs com package exceljs https www npmjs co
  • 有 Haskell 日期库吗?

    Haskell 中是否有一个函数允许我输入日期的组成部分 如字符串表示形式或日月年组成部分 我可以从中获取信息 如星期几 一个月中的天等 我在网上查了一下 看起来有很多自定义库 但我希望 ghci 10 6 4 的标准前奏库中有一个没有很好
  • 这是我们可以强制 ObjectDataSource 的唯一方法吗?

    问候 1 我假设对象数据源仅在第一次请求时自动绑定到数据源 但不会在回发时自动绑定到数据源 否则ObjectDataSource 选择事件也会在回发时被触发 但事实并非如此 A 所以唯一的办法就是强迫对象数据源也可以通过手动调用来绑定回发数
  • 关于“评估是邪恶的”和“同意成年人”[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我看到很多人说 评估是邪恶的 危险的 不安全的 https stackoverflow com questions 1832940 is usi
  • pip install MySQL-python 在 ubuntu 14.04 上失败,错误:命令“x86_64-linux-gnu-gcc”失败,退出状态为 1

    我已经阅读了所有要安装的软件包列表的堆栈溢出 谷歌建议 但似乎都没有解决这个问题 将 ubuntu 14 04 Web 服务器从美国托管提供商迁移到欧洲的 DigitalOcean 两者都配置了相同的 Ansible playbook 但美
  • 在递归函数javascript上获取返回未定义

    我听说递归函数很强大 所以我尝试创建一个函数来增加一个数字 直到达到某些点 而不是通过循环 当它到达时我试图返回该值 但它给出了undefined CODE var i 1 function rec i console log i if i
  • 如何打破 XSLT 中的 for-each 循环?

    如何打破 XSLT 中的 for each 循环 XSLT 是以一种非常函数式的风格编写的 在这种风格中没有与break陈述 你可以做的是这样的
  • 在 Pandas 中根据多个条件过滤 DataFrame

    对于我的班级 我需要找到虹膜数据集中介于 4 5 和 6 之间的萼片长度 确切的规范是 选择萼片长度大于 4 5 但小于 6 的行 给定的代码 答案应采用这种形式 是 subset data data petal width cm gt 2
  • 使用映射更新没有对象的数组

    如果我有一个像这样的对象数组 name james name john 我知道 john 的索引并且想要更改 john 的值我会做 person person map p i gt i index p name changed john p
  • 如何使用注释应用唯一约束

    Column name userId UniqueConstraint private Integer userId 我正在使用这些注释将数据输入数据库表 我想让 userId 字段成为唯一字段 但是当我这样做时 它向我显示错误 Uniqu
  • PHP 计算字符串出现次数的最快方法是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 字符串 S 的前缀是 S 的任何前导连续部分 例如 c 和 cod 是字符串 codility 的前缀 为简单起见 我们要求前缀非空 字符串 S
  • UDP打洞

    我有一些关于 UDP 打洞的问题 基于维基百科http en wikipedia org wiki UDP hole punching http en wikipedia org wiki UDP hole punching 1 要在两方