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

Abh*_*tia 7 python sockets networking

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

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)
Run Code Online (Sandbox Code Playgroud)

现在,对于其他客户端连接,我有端口转发它手动,它工作正常. 在此输入图像描述

我想以自动化方式做到这一点. - >我试试upnp.

import miniupnpc

def open_port(port_no):
    '''this function opens a port using upnp'''
    upnp = miniupnpc.UPnP()

    upnp.discoverdelay = 10
    upnp.discover()

    upnp.selectigd()

    # addportmapping(external-port, protocol, internal-host, internal-port, description, remote-host)
    result=upnp.addportmapping(port_no, 'TCP', upnp.lanaddr, port_no, 'testing', '')
    return result
Run Code Online (Sandbox Code Playgroud)

它打开一个如下图所示的端口.但第一张图片中显示的端口转发列表为空.它不起作用,客户端无法连接.我怎样才能解决这个问题?我错过了什么? 在此输入图像描述

Dev*_*das -2

这是一个有趣的问题。我想从我能召唤的东西中

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
Run Code Online (Sandbox Code Playgroud)

  • 请[编辑]您的答案以包含回答问题的代码或其他内容,而不是添加评论。 (2认同)