Python TCP打洞

Python TCP hole punching

我目前正在 python 开发一个小型 p2p 基本系统,我想知道你们如何制作 TCP 打孔器。我已经在 UDP 中成功完成了一个,但我希望其余的更有组织的 TCP 连接。

是的,我已经用谷歌搜索了这个问题,但似乎并不是每个人都有相同的答案,也没有用。

你得用点小技巧了。如果您知道要连接的对等点的 IP 地址和端口,比如 192.168.1.2:8081 ,那么您可以通过直接连接到它(当然使用相同的 IP)并告诉它您的真实地址来打孔IP 是:

import socket
peer_ip = "192.168.1.2"
peer_port = 8081
my_ip = "192.168.1.1"
my_port = 8080

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((peer_ip, peer_port))
sock.send("OPEN %s:%d\n" % (my_ip, my_port))

如果您连接到它,那么防火墙应该打开一个从您的 IP 地址到您在 OPEN 命令中指定的对等 IP 地址和端口的端口(这是一个称为 ASYNC3 的 TCP 打洞协议,在Async3 网站)。

要对此进行测试,您可以使用 nc 连接到对等点并打个招呼。如果你在 NAT 后面并且有防火墙(即使它不是打开漏洞的同一个防火墙),这应该有效:

$ nc 192.168.1.2 8081
hello, world!