python中允许套接字连接的端口转发

2024-05-17 05:07:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用套接字启动服务器,并希望允许客户端连接到它。在

self.sock.bind(('0.0.0.0',0)) # 0.0.0.0 will allow all connections and port 0 -> os chooses a open port.
stroke_port=self.sock.getsockname()[1]
self.sock.listen(75)
self.open_port_popup(stroke_port)

现在,对于其他客户机连接,我有端口转发它手动和它的工作正常。enter image description here

我想用自动化的方式来做这个。->;我尝试upnp。在

^{pr2}$

它打开一个如下图所示的端口。但是第一张图中显示的端口转发列表是空的。它不工作,客户端无法连接。我该怎么解决这个问题?我错过了什么? enter image description here


Tags: and端口self服务器客户端strokeosbind
3条回答

这是个有趣的问题。 从我能召唤出来的我想

GUI显示添加了UPNP端口转发规则。 所以很可能UPNPC的配置有问题。 我怀疑你是在路由器或类似的平台上用X-WRT或OpenWRT来做这件事

我认为问题是你不能用upnp来解决这个问题,或者因为一些奇怪的原因它不能工作。

我建议你试试这个库pytables

我知道你想知道原因,我正在努力找出原因。

这只是为了让你继续这个项目

为了快速解决问题

试试这个

 import subprocess

p = subprocess.Popen(["iptables", "-A", "INPUT", "-p", "tcp", "-m", "tcp", " dport", "22" , "-j", "ACCEPT"], stdout=subprocess.PIPE)
        output , err = p.communicate()
        print output

我想我们遗漏了很多相关的信息来知道这里的主要问题是什么。我看到很多人在猜测。

顺便说一下,编辑一下那行

result=upnp.addportmapping(port_no, 'TCP', upnp.lanaddr, port_no, 'testing', '')

result=upnp.addportmapping('7777', 'TCP', '192.168.1.8', '7777', 'testing', '')会告诉你它是否有效。 从本地主机进行端口测试这是虚拟的,你根本不在路由器下面。

另外,记住使用Try/Except块来告诉您代码中的错误。

try:
    print "1" + 1
except Exception as e:
    print str(e) 

另一种不流行的方法是使用html/web自动化,甚至使用cURL来生成那些请求,而不是使用uPnp,这种方式实际上不需要处理它。

我认为您使用upnp.lanaddr作为内部主机地址是错误的。upnp.lanaddr是您的路由器upnp设备的地址,您要使用服务器的本地地址。

如果需要,请查看Finding local IP addresses using Python's stdlib如果您想动态获取服务器本地IP。

相关问题 更多 >