python - 在 Python 中通过 UPnP 转发端口

标签 python python-2.7 upnp

我正在制作一个 Python 应用程序,它要求用户将端口转发到他的计算机,以便与服务器或其他用户通信。当前的实现工作得很好,但唯一的问题是运行文件的人必须手动将端口转发到本地 IP。我想自动化这个。他选择一个端口,脚本检查它是否可以转发,然后转发它。如果不能,则分别处理错误。

我研究了一些声称可以在纯 Python 中执行此操作的库(因为我需要在完成后编译为 .exe 的 [...]),但没有设法找到有用的东西。如果您能向我提供有关如何尝试转发端口并分别处理成功/失败的代码示例,那就太好了。

提前感谢您的宝贵时间。

P.S.:我的目标是Python 2.7.X

最佳答案

看起来有几个选项:

GNUPnP 的 python 绑定(bind)有一个很好的例子,用于打开路由器上的端口 here . 在该示例中,租用时间设置为 0,即无限制。参见 here对于 add_port 的定义。

一个简单的例子可能是:

#! /usr/bin/python
import gupnp.igd
import glib
from sys import stderr

my_ip = YOUR_IP

igd = gupnp.igd.Simple()
igd.external_ip = None

main = glib.MainLoop()

def mep(igd, proto, eip, erip, port, localip, lport, msg):
    if port == 80:
        igd.external_ip = eip
        main.quit()

def emp(igd, err, proto, ep, lip, lp, msg):
    print >> stderr, "ERR"
    print >> stderr, err, proto, ep, lip, lp, msg
    main.quit()

igd.connect("mapped-external-port", mep)
igd.connect("error-mapping-port", emp)

#igd.add_port("PROTO", EXTERNAL_PORT, INTERNAL_IP, INTERNAL_PORT, LEASE_DURATION_IN_SECONDS, "NAME")
igd.add_port("TCP", 80, my_ip, 8080, 86400, "web")

main.run()

关于python - 在 Python 中通过 UPnP 转发端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14482500/

相关文章:

Python 按键错误

python - PyYAML与组合,属性错误

python - 艰难地学习 Python - 练习 39

django - 在/admin/配置不当

python - 如何捕获 python 警告错误和 'bury' 呢?

linux - UPnP 端口转发持续存在

android - 用于流 android 的 UPnP 媒体服务器

python - Networkx 使用frameon = False 和axes = False 绘制轴

python - django cmsplugin-blog 使用 whoose 搜索 haystack 的索引

python - 在特定的一个数据集上出现此错误