带有STUN的Python Flask

时间:2018-02-27 02:37:18

标签: python flask stun

我正在开发一个简单的基于Flask的服务器,它可以与互联网上的对等应用程序(其他类似服务器)进行通信。该应用程序可以在NAT后面。所以我试图通过使用pystun来解析外部IP和端口。

import stun
nat_type,external_ip,external_port=stun.get_ip_info()

返回的端口是54320.问题是当我尝试http://external_ip:54320请求未到达Flask应用时。 http://external_ip:5000也不起作用,5000是使用的内部端口(我知道这不应该工作,但无论如何都要尝试)。没有防火墙。我运行Flask,主机=“0.0.0.0”。 添加..我不想在路由器中进行显式的端口映射..有没有办法烧瓶可以监听可从外部地址访问的端口并通过眩晕找出外部端口?

1 个答案:

答案 0 :(得分:0)

如果不进行显式端口映射,很难在NAT后面托管服务器。 NAT也充当防火墙。 NAT后面的节点可以建立出站TCP连接,但NAT将阻止任何入站连接。

STUN在这里没有用,因为它只能帮助NAT后面的节点发现自己的端口映射。要允许在STUN之后建立连接,通常需要执行打孔步骤,这会导致两个端点同时尝试相互连接。

您可以尝试的一个想法是使用UPNP,这是许多NAT支持动态创建端口映射的协议。有一些可能有用的开源库。

但更简单的解决方案是将NAT配置为具有显式端口映射。 (例如,端口50000映射到特定端口的PC的内部IP地址。)