我正在制作一个Python应用程序,要求用户将端口转发到他的计算机,以便与服务器或其他用户进行通信。当前的实现工作非常好,但唯一的事情是运行该文件的人必须手动将端口转发到本地IP。我想自动化这个。他选择一个端口,脚本检查是否可以转发,然后转发它。如果它不能,则分别处理错误。
我已经查看了一些声称可以在纯Python中执行此操作的库(因为我需要在完成后编译为.exe' s)但是没有管理找到有用的东西。如果您可以为我提供有关如何尝试转发端口并分别处理成功/失败的代码示例,那就太棒了。
提前感谢您的时间。
P.S.:It'我正在瞄准的Python 2.7.X
答案 0 :(得分:0)
看起来有几个选项:
有一个很好的例子,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()