我正在尝试 Build 一个对等的2对等音频/视频应用程序,但在NAT和防火墙后面导致我的应用程序失败,我发现Skype做了它,其他应用程序也做其他方法,然后我决定使用这种方法,这将允许我的申请在NAT办公室/家庭后面工作 .
UDP Hole punching:
到目前为止,尝试过hping2和netcat . 服务器,nat /防火墙后面的pc1和nat /防火墙后面的pc2
local/1$ nc -u 14141 -l # ME, step 1
remoteServer$ echo "hello" | nc -p 53 -u xx.23.xx.xx 14141 # My server, to say hello
nc: Write error: No route to host
local/2$ hping2 -c 1 -2 -s 14141 -p 53 xx.21.xx.xx # Me from second terminal making a hole
remoteServer$ echo "hello" | nc -p 53 -u xx.23.xx.xx 14141 # My server again say hell
local/1 $ nc -u 14141 -l # ME, step 1 was running and it received "hello" now
hello
但本地/ 1如何得到你好,没有hping2或什么是hping2?谁有人建议?或者我怎么能用A(本地)B(服务器)C(我的朋友)使用这种方法与对等2对等体通信?
有用的链接:http://www.masquerade.cz/en/nat-tunel-metodou-udp-hole-punching-v-jazyce-java/
Follow up: UPnP是最佳解决方案?但是它会寻找下一跳,所以在这种情况下,这个路线图会失败(如果我没错):
我(在NAT后面) -> MyOffice(带路由器,50台笔记本电脑) -> ISP1 -> ISP2 -> FriendOffice(路由器,90台笔记本电脑) -> 朋友(NAT后面)
1 回答
许多p2p应用程序所做的是连接到最近的路由器并要求它们自己打开一个端口 . 阅读有关UPnP和NAT-PMP协议的信息 .