开发中与 INADDR_ANY 绑定与 INADDR_LOOPBACK 绑定?

the*_*zie 5 sockets

我正在使用Pelican建立博客。启动开发服务器后,我收到警告:

\n\n
\n

您是否希望应用程序 \xe2\x80\x9cPython.app\xe2\x80\x9d 接受传入的网络连接?单击“拒绝”可能会限制应用程序\xe2\x80\x99s 的行为。可以在“安全和隐私”首选项的“防火墙”窗格中更改此设置。

\n
\n\n

我确信我以前见过这个警告(Django?),只是心不在焉地接受了它。不过,我一直试图弄清楚它的实际含义,这让我陷入了网络编程的兔子洞。

\n\n

我发现 Pelican 默认使用 INADDR_ANY 绑定其服务器套接字,这让我产生了几个问题:

\n\n
    \n
  • 与 INADDR_ANY 绑定而不是 INADDR_LOOPBACK 绑定有什么好处吗?\n\n
      \n
    • 连接到开发服务器的标准方法是 localhost:8000。是否存在不只使用 localhost 的情况?
    • \n
  • \n
  • 使用 INADDR_ANY 是否存在任何风险?\n\n
      \n
    • 我认为使用 INADDR_ANY 存在一些风险或其他相关的风险,否则警告不会弹出。我的猜测是,理论上有人可以向我的套接字发送 HTTP 请求,并扰乱我的 HTTP 处理程序允许他们做的任何事情?
    • \n
  • \n
\n\n

如果任何答案提供网络编程术语/概念的基本定义(如果合理),我将不胜感激。我对这门学科的了解仅限于周末的学习。

\n\n

更新

\n\n

雷米的回答简洁明了,而且似乎很正确。但是,虽然它解释了这些概念,但它并没有直接解决我的一些问题。我会解释一下以防其他人看到这个:

\n\n

我发现绑定到 INADDR_ANY (0.0.0.0) 也是 Python 的http.server的默认设置。根据Pylons主要贡献者的说法,显然这会减少那些对网络一无所知的人(例如我)的抱怨。诸如虚拟机之类的东西被认为是挫败感的根源。

\n\n

绑定到 INADDR_ANY 的唯一直接风险是本地网络上的其他人可能会连接到您的开发服务器。但只要您不与死敌共享互联网访问权限,就没有问题。如果您通过设置适当的端口转发明确允许,那么来自外部来源(超出您的本地网络)的唯一风险就会出现。

\n

Rem*_*eau 6

如果将服务器绑定到INADDR_LOOPBACK,则只有与服务器位于同一计算机上的客户端才能使用环回 IP(如127.0.0.1(IPv4) 或::1(IPv6))或映射到此类 IP 的名称(如 )连接到它"localhost"

如果将服务器绑定到INADDR_ANY,则服务器将绑定到计算机上的所有可用网络接口,并且可以由服务器 LAN 上的任何客户端使用服务器的 LAN IP 或主机名连接到。LAN 外部的客户端也可以连接,但前提是 LAN 的路由器已相应配置了端口转发。