是否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