【问题标题】:How to access Flask app from other networks? [duplicate]如何从其他网络访问 Flask 应用程序? [复制]
【发布时间】:2017-12-22 03:28:54
【问题描述】:

如标题所示,我正在尝试创建一个可以跨网络访问的 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页面,答案说的是安全设置。我完全不明白如何改变这些。问这个问题的人最后评论说“我玩弄了安全设置,终于让它工作了”,这让我得出结论,我应该做同样的事情。不幸的是,我不知道该怎么做。有人能指出我正确的方向吗?我会提供所有需要的额外信息。

谢谢,

【问题讨论】:

  • 您是否在路由器上进行了端口转发?你发现的帖子是关于亚马逊网络服务的,这与你的情况无关。如果没有端口转发,公共互联网将无法访问您的内部局域网计算机的端口。
  • 正如@ThuYeinTun 所说,如果没有端口转发,您就无法从网络外部访问您的机器。您必须在 wifi 路由器上进行弱设置。绝对是硬件问题,与编码无关。
  • 哦,我差点忘了:无论你做什么,在设置 NAT 时不要让debug=True 处于开启状态,这是一个重大的安全漏洞,并为攻击者从您的进程中运行任意 Python 代码。

标签: python python-2.7 networking flask


【解决方案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。

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

您的 ISP 将分配给您路由器的 WAN 端口其中一个“公共 IP”形成其池(它们通常会轮换它们,除非您为静态 IP 地址付费)-您需要找出一个(@ 987654321@ 是最简单的方法),然后从您的手机(或外部计算机或其他)指向它。

问题很复杂,如前所述,对新手来说很危险 - 让自己了解路由和 NAT:请注意,如今开放网络并保持服务器在公共网络上运行是非常可怕的事情(我不会不要这样做,我曾经在谷歌工作,现在我在另一家“大型知名”公司工作:)

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

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2021-06-06
    • 1970-01-01
    • 2023-01-24
    • 2021-11-22
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    相关资源
    最近更新 更多