python3 -m http.server --bind ::
启动一个python服务器,如Python3: http.server支持ipv6吗?所示。但是,它也支持IPv4,因为我可以使用localhost:8000
访问web服务器(编辑:甚至127.0.0.1:8000
工作)。我不想这样。尽管我使用了http.server
,但是python http.server
是双堆栈的。
默认情况下,服务器将自身绑定到所有接口。选项b/- bind指定它应该绑定到的特定地址。文档
有禁用IPv4的方法吗?,我让它绑定到::
。
发布于 2022-10-27 22:38:35
没有办法做到这一点,因为对IPv4的支持不是由Python提供的,而是由操作系统提供的。,我不是百分之百肯定。
更多细节
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数据包创建了一个网络文件/套接字,尽管它并没有要求它(为了方便)。根据我对lsof
和docs的理解:
当打开的IPv4网络文件的地址被映射到IPv6地址中时,打开的文件类型将是IPv6,而不是IPv4,其显示将由'6‘而不是'4’选择。
我刚刚意识到这是一个与我读昨天..。非常相似的“特性”
这意味着它不再是堆栈溢出的答案,而是Linux的答案:如何关闭服务器的双堆栈网络?
https://stackoverflow.com/questions/74228836
复制相似问题