【问题标题】:Forward a port via UPnP in Python在 Python 中通过 UPnP 转发端口
【发布时间】:2013-01-07 02:19:18
【问题描述】:

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

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

提前感谢您的宝贵时间。

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

【问题讨论】:

  • P.S.:该应用程序将在 Mac 上开发,然后在 Windows 机器上进行测试。如果有效,它将被编译并部署到所有平台。
  • 我正在研究同样的事情,不幸的是,到目前为止我只发现了BrisaMiniUPNP......肯定有一个更当前/紧凑/纯 Python 实现吗?有人吗?
  • 在这里寻找跨平台解决方案。
  • @AbhishekBhatia 我将尝试提供的一个答案,并在一般情况下为此工作几分钟。因为那是差不多 3 年前的事了,我不记得我到底做了什么。我可能放弃了端口转发的想法。如果你也有什么想法,请告诉我。
  • @DaKnOb 嗨,谢谢。我试过这个 stackoverflow.com/questions/36123075/… 。但这似乎不起作用。如果可能,请告诉我。

标签: python python-2.7 upnp


【解决方案1】:

看起来有几个选项:

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

一个简单的例子可能是:

#! /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()

【讨论】:

    猜你喜欢
    • 2012-11-22
    • 2017-04-23
    • 2012-11-03
    • 2012-04-02
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    • 2013-09-22
    相关资源
    最近更新 更多