我有一些关于UDP打孔的问题。基于维基http://en.wikipedia.org/wiki/UDP_hole_punching
1)要在双方(位于NAT之后的客户端和非NAT的服务器)之间建立UDP会话,客户端是否只需向服务器发送一个数据包,然后该会话就可以双向(发送和接收)通过防火墙?这意味着客户端也可以从服务器接收。
2) UDP打洞:两个客户端首先连接到服务器,然后服务器给其他客户端一个客户端端口/ ip,这样客户端就可以在这些端口上相互发送数据包。这是coorrect吗?
3)如果#2是真的,为什么防火墙会允许从另一个IP接收数据,而不是在该端口上建立连接时使用的IP?听起来像是一个很大的安全漏洞,应该很容易过滤掉?我知道源IP欺骗会欺骗它,但是这个?
先谢谢你,约翰
发布于 2011-01-24 17:22:19
1)可以,使用最合理的防火墙,除非您将其配置为极其偏执的模式。
2)不完全正确。This article对此进行了更详细的解释,但其想法是其中一个客户端首先向另一个客户端的公共IP发送数据报。然后这个数据报被丢弃,但是另一个客户端知道它被发送了,因为第一个客户端通过服务器告诉它。然后,另一个客户端将数据报发送回第一个客户端,发送回产生第一个数据报的同一端口。由于第一个客户端的NAT记得有来自该端口的数据包,因此它将传入的数据报视为对第一个数据包的回复。这里的问题是找出哪个公共端口NAT将选择发送第一个数据报,但大多数NAT都是以可预测的方式进行的,因此它几乎总是工作得很好,有时只是不是从第一次尝试开始。
发布于 2011-01-24 17:15:11
1)可以。但是,如果您联系的是非non non服务器,则不需要打洞。您的客户端应用程序运行正常。
2)可以。
3)有些NAT确实将公共端口限制为只有一个发送方-接收方对。如果您需要在这样的场景中打洞,您唯一的机会就是猜测NAT将选择哪个公共端口进行直连。
但是,NAT不是一项安全功能。因此,接受任何数据包到公共端口不是安全漏洞,因为与客户端直接连接到互联网的简单情况没有区别。
https://stackoverflow.com/questions/4780199
复制相似问题