Boo*_*ona 14 python upnp ftplib
我开发了一个应用程序,它本质上只是一个小的ftp服务器,能够指定您希望在启动时共享的目录.我正在使用ftplib作为服务器,因为它很容易生病.我唯一的问题是,如果你在路由器后面,你必须手动转发路由器上的端口,我发现它对我的用户(又名同事/客户端)来说有点太复杂了.
所以我一直在寻找一个开放端口的简单解决方案,但我发现大多数API太宽泛而且超出我的想象.有人知道一个相对简单的解决方案吗?
注意:它实际上只会在Windows上使用,尽管欢迎跨平台兼容性.如果有一个更简单的Windows解决方案,那么我会选择它.
谢谢!
Gre*_*egD 10
您想要的协议称为IGD(用于Internet网关设备),并且基于UPNP.它允许客户端程序(您的)发现网络上的路由器(使用UPNP),然后要求它转发特定端口.
大多数家用路由器都支持这种技术,而且很多服务都使用这种技术,比如BitTorrent或multiPlayer游戏,使用或实现它有点复杂.有几个支持IGD的开源库,其中一个最简单的(也是跨平台的)是" miniupnp ":请参阅http://miniupnp.free.fr/
miniupnp的简单示例.它在发现的网关上创建从外部端口43210到连接到已发现网关的接口上连接到端口43210的接口的映射.
import miniupnpc
upnp = miniupnpc.UPnP()
upnp.discoverdelay = 10
upnp.discover()
upnp.selectigd()
port = 43210
# addportmapping(external-port, protocol, internal-host, internal-port, description, remote-host)
upnp.addportmapping(port, 'TCP', upnp.lanaddr, port, 'testing', '')
Run Code Online (Sandbox Code Playgroud)