从路由器后面制作公开的TCPServer

时间:2012-01-23 00:29:13

标签: python sockets router portforwarding socketserver

python 2.7.2 Windows 7 32位

让我先说一下这个问题,我对网络编程很新。我使用python的内置SocketServer

创建了一个简单的服务器和客户端
SocketServer.ThreadingTCPServer((host, port), Handler)

当主机为“localhost”并且客户端和服务器位于同一台计算机上时,此方法正常。 但是,我希望能够从互联网上访问服务器。我的电脑在路由器后面。我正在使用pystun(下方) 确定我的计算机公共IP地址但无法连接。我已经做了一些研究,我的理解是,当程序打开一个端口时,路由器会识别并转发到该计算机的流量。这似乎没有发生。我的防火墙已禁用,结果相同。我需要使用端口转发吗?大多数应用程序如何能够从路由器后面进行通信?我查看了puncher(下面的源代码)和通过win32com here进行端口转发。我正在寻找有人指出我正确的方向。如何以编程方式让服务器从路由器后面打开一个侦听端口并将流量转发给它?

打孔源:https://coherence.beebits.net/svn/trunk/Puncher/puncher/base.py pystun:http://pypi.python.org/pypi/pystun

2 个答案:

答案 0 :(得分:1)

lafibre.info/download/upnp/igdctl.pl

我已经使用这个脚本多年了,它显然是在perl中,所以你可以按原样使用它,或者将它移植到python。

FWIW,我一直想将它移植到python一段时间,所以如果你想要一只手,请ping我(github上的richoH)

答案 1 :(得分:0)

需要在路由器上设置此(端口转发)。由于路由器后面(可能)有几个设备,它需要知道哪个设备转发进入端口80(或其他)的流量。