繁体   English   中英

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

[英]Port forwarding in python to allow socket connections

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

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)

现在,为了让其他客户端连接,我手动进行了端口转发,它工作正常。 在此处输入图像描述

我想以自动化的方式做到这一点。 -> 我试试 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

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

我认为你使用upnp.lanaddr作为内部主机地址时犯了一个错误。 upnp.lanaddr是upnp设备的地址,它是您的路由器,您想要使用服务器的本地地址。

如果需要,请查看使用Python的stdlib查找本地IP地址,如果您想动态获取服务器本地IP。

我认为我们缺少很多相关信息,以了解这里的主要问题。 我看到很多人在猜测。

顺便说一句,只需编辑该行

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

result=upnp.addportmapping('7777', 'TCP', '192.168.1.8', '7777', 'testing', '')会告诉你它是否有效。 从localhost做端口测试它是假的,你根本就不在路由器下面。

另外,请记住使用Try / Except块来告诉您代码有什么问题。

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

另一种方式,非流行的是使用html / web自动化,甚至cURL使用uPnp来代替这些请求,这样你就不需要处理它了。

大多数时候 ISP 不允许端口转发,而您会花费数小时尝试转发端口。 我选择了ngrok ,它是一个轻量级的免费(用于基本使用)程序,它为端口建立隧道并提供自己的隧道域,可以在任何地方访问。

如果您觉得有用,请点赞答案

这是一个有趣的问题。 从我能想到的,我想

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM