【问题标题】:Run python http.server for IPv6 only仅为 IPv6 运行 python http.server
【发布时间】:2022-11-03 00:48:47
【问题描述】:

python3 -m http.server --bind :: 启动 python web 服务器,如Python 3: Does http.server support ipv6? 所示。但是,它也支持 IPv4,因为我可以使用 localhost:8000 访问 Web 服务器(编辑:甚至 127.0.0.1:8000 也可以)。我不想要那个。即使我使用了--bind,python http.server 也是双栈的:

默认情况下,服务器将自己绑定到所有接口。选项 -b/--bind 指定它应该绑定的特定地址。 docs

有没有办法禁用 IPv4?我要求它绑定到::

【问题讨论】:

  • “localhost”名称是 IPv4 和 IPv6 中的别名。 “localhost”映射到“::”。如果你做127.0.0.1:8000,它会起作用吗?
  • 是的,我的浏览器可以访问127.0.0.1:8000。虽然,我不知道 localhost 解析为::。这是真的:dig AAAA localhost 得到 ::1。谢谢!

标签: python


【解决方案1】:

没有办法做到这一点,因为对 IPv4 的支持不是由 Python 提供的,而是由操作系统提供的。 不过,我不是 100% 确定。

更多细节

lsof -nP -i4TCP | grep LISTEN(在 IPv4 上打开网络文件/套接字)的输出包括(注意 IPv6

Python    30838  ben    3u  IPv6 0xb364e79e7fc44213      0t0  TCP *:8000 (LISTEN)

这是在 IPv6 网络文件 lsof -nP -6 旁边(警告:lsof -nP -i6TCP 没有显示它?):

Python    30838  ben    3u  IPv6 0xb364e79e7fc44213      0t0  TCP *:8000 (LISTEN)

我认为操作系统为 IPv4 数据包创建了一个网络文件/套接字,即使 Python 没有要求它(为了方便起见)。根据我对lsof 和文档的理解:

当一个开放的 IPv4 网络文件的地址是映射到 IPv6 地址, 打开文件的类型将是 IPv6,而不是 IPv4,其显示将是 由“6”而不是“4”选择。

我刚刚意识到这是一个与我正在阅读的一个非常相似的“功能”yesterday...

这意味着它不再是 Stack Overflow 的答案,而是 Linux 的答案:如何关闭服务器的双栈网络?

【讨论】:

    猜你喜欢
    • 2014-11-07
    • 2022-09-23
    • 2017-05-14
    • 1970-01-01
    • 2021-12-24
    • 2023-02-01
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多