在路由器后创建公开可用的TCP服务器

2 投票
2 回答
749 浏览
提问于 2025-04-17 10:51

python 2.7.2
windows 7 32位

在问这个问题之前,我想说我对网络编程还比较陌生。我用python自带的SocketServer创建了一个简单的服务器和客户端。

SocketServer.ThreadingTCPServer((host, port), Handler)

当主机是'localhost',而客户端和服务器在同一台机器上时,这一切都运行得很好。不过,我想从互联网的另一端访问这个服务器。我的电脑在一个路由器后面。我正在使用pystun(见下文)来确定我的电脑的公共IP地址,但无法连接。我做了一些研究,了解到当一个程序打开一个端口时,路由器会识别到这一点并将流量转发到那台电脑。但这似乎没有发生。即使我关闭了防火墙,结果也是一样。我需要使用端口转发吗?大多数应用程序是如何在路由器后面进行通信的?我查看了puncher(源代码见下)和通过win32com进行的端口转发在这里。我希望有人能给我指个方向。我该如何通过编程让服务器在路由器后面打开一个监听端口并将流量转发到它?

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

2 个回答

0

这个(端口转发)需要在路由器上设置。因为路由器后面可能连接着好几个设备,所以路由器需要知道把进入80号端口(或者其他端口)的流量转发到哪个设备上。

1
lafibre.info/download/upnp/igdctl.pl

我已经用这个脚本很久了,它显然是用perl写的,所以你可以直接使用它,或者把它转换成python。

顺便说一下,我一直想把它转换成python,如果你需要帮助,可以联系我(github上的用户名是richoH)。

撰写回答