是否http.server
(http
是一个Python 3.x模块)支持ipv6?例如,使用这个命令行代码(启动一个web服务器):Python 3:请问http.server是否支持ipv6?
python -m http.server [port]
是否http.server
(http
是一个Python 3.x模块)支持ipv6?例如,使用这个命令行代码(启动一个web服务器):Python 3:请问http.server是否支持ipv6?
python -m http.server [port]
是的,它的确如此。在定义你的服务器时,像这样做,如here。
class HTTPServerV6(HTTPServer):
address_family = socket.AF_INET6
,然后听这样的:
server = HTTPServerV6(('::', 8080), MyHandler)
server.serve_forever()
令人难过的是,让内置HTTP服务器处理IPv6和IPv4连接似乎很困难 – 2015-09-18 07:14:38
IPv6栈将IPv4连接处理为只要被动套接字未绑定到特定的v6地址(!= in6addr_any,一个空字符串“::”)或选项IPv6_ONLY被设置。 – 2016-05-30 09:05:09
有一个补丁,允许IPv6的绑定在http.server
在Python 3。我试了一下,发现它可以在我的笔记本电脑。 请访问https://bugs.python.org/issue24209了解更多信息。 或只是做如下:
将+
后面的行添加到文件/your/path/to/python/Lib/http/server.py
。 请注意,没有+
的行是server.py
的原始代码。
server_address = (bind, port)
+ if ':' in bind:
+ ServerClass.address_family = socket.AF_INET6
+
HandlerClass.protocal_version = protocol
httpd = ServerClass(server_address, HandlerClass)
然后尝试:
python -m http.server -b *your-ipv6-addr* *your-port*
使用netstat的'向-l'看看它绑定到端口上的IPv6地址。如果是,那么“是的,它是支持的”。 – user2864740 2014-09-12 22:38:29
你如何解释结果?我甚至没有看到我连接到的端口号(或任何提到的IPv6)。 – Shule 2014-09-12 23:13:21
也使用'-n'选项,这是否使输出更有用? IPv6地址可以通过与IPv4相对应的不同来识别 - 如果服务器侦听IPv6和IPv4上的端口,则会显示两个条目。 IPv4的listen-all-IPs值为0.0.0.0,IPv6的值为:: 0。 (如果之后没有显示端口,那么服务器当前不在运行/收听。) – user2864740 2014-09-12 23:16:25