如何从其他网络访问Flask应用程序?

时间:2017-12-22 03:28:54

标签: python python-2.7 networking flask

我正在尝试创建一个Flask应用程序(使用Python 2.7),我可以从网络中访问,正如标题所示。我已设法启动并运行该应用程序,并且它可以在运行应用程序的计算机的整个Wi-Fi网络中成功运行。我一直使用我的内部IP地址和端口8000访问它。每当我从连接到Wi-Fi的手机连接时,它都能正常工作。但是,当我切换到蜂窝数据并从中连接时,它不起作用,而是说“花了太长时间才能响应”。应用程序本身的代码如下:

from flask import Flask, render_template
from GradeScraper import scrapeforgrades
app = Flask(__name__)

@app.route('/')
def home():
    scrapeforgrades()
    return render_template("Grades.html")

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8000, debug=True)

GradeScraper只是我编写的一个网络刮刀,可以在应用程序中调用。我不相信这个档案是我遇到问题的原因。

我也尝试从外部IP地址连接到应用程序,但它说“拒绝连接”。我去了this我发现的StackOverflow页面,答案说了一些安全设置。我根本不明白如何改变这些。问这个问题的人最后评论说“我玩过安全设置并最终使其工作”,这使我得出结论,我应该这样做。不幸的是,我不知道该怎么做。有人能指出我正确的方向吗?我将提供所需的任何和所有额外信息。

谢谢,

1 个答案:

答案 0 :(得分:1)

对于一个开始可能(希望!)你的路由器阻止所有传入的连接;即使没有,您的计算机的“内部IP地址”(通过WiFi连接的那个)不仅无法从网络外部访问,而且也无法访问(换句话说,您的移动运营商网络不知道如何查找它)。

您应该在路由器中寻找NAT(网络地址转换)功能,选择一个外部端口(任何端口都可以 - 我建议一个超过1024)并将该端口映射到您计算机的IP地址,即端口8000。

如果您不知道自己在做什么,这是一个非常糟糕的想法 - 您将立即成为寻找漏洞的端口扫描程序的目标。

扩展主题......

您的计算机的IP将类似于192.168.1.101,而您的路由器可能类似于192.168.1.1 - 192.168 / 16空间被视为“私有IP空间”并且无法从“公共IP”空间(一个所有外部服务都在其中 - 例如,从我的位置,google.com映射到172.17.6.46。

您的手机有两个无线电(因此,逻辑上,不是物理上,2个NIC):WiFi(将从路由器中的DHCP服务器获取地址:类似于192.168.1.102)和LTE / 4G无线电(它将从您的提供商处选择一个IP地址 - 例如174.94.66.23,或者可能是IPv6):前者可以到达您的本地服务器,但后者不能。

您的ISP将分配到您的路由器的WAN端口,其中一个“公共IP”形成其池(它们通常会轮换它们,除非您支付了静态IP地址) - 这是您需要找到的({ {3}}是最简单的方法)然后从手机(或外部计算机或其他任何东西)指向它。

问题很复杂,如上所述,对于新手来说是危险的 - 教育自己关于路由和NAT:只要知道开放网络并让服务器在公共网络上运行是非常可怕的事情(我不知道)做到这一点,我曾经在谷歌,我现在与另一个“大知名”公司:)

或者,如果您的路由器允许,您可以设置OpenVPN连接:这更安全,但完全是其他复杂程度。

希望这有帮助。