我有一個IPv6地址,我想打印一個人們可讀的格式。我如何解碼/打印Python中的IPV6地址
在IPv4地址我也socket.inet_ntoa(...)
,但在IPv6上,我得到
socket.error: packed IP wrong length for inet_ntoa
我有一個IPv6地址,我想打印一個人們可讀的格式。我如何解碼/打印Python中的IPV6地址
在IPv4地址我也socket.inet_ntoa(...)
,但在IPv6上,我得到
socket.error: packed IP wrong length for inet_ntoa
使用inet_ntop
(它同時適用於IPv4和IPv6),而不是inet_ntoa
(這是僅IPv4)。
print(socket.inet_ntop(socket.AF_INET6, socket.inet_pton(socket.AF_INET6, '10::')))
socket.inet_ntoa(packed_ip)轉換的32位打包的IPv4地址( 串在長度爲4個字符)到其標準點分字符串 表示(例如'123.45.67.89')。當 與使用標準C庫的程序進行對話並且需要 struct in_addr類型的對象時這很有用,該對象的類型是該函數用作參數的32位 打包二進制數據的C類型。
如果傳遞給該函數的字符串長度不是 長度上的4個字節,則會引發socket.error。 inet_ntoa()不支持 IPv6,應該使用inet_ntop()代替IPv4/v6雙棧 支持。
您可以使用庫IPy爲了照顧IPv4和IPv6。
>>> print(IP('1080:0:0:0:8:800:200C:417A'))
1080::8:800:200c:417a
除'inet_ntop'外,還可以使用'socket.NI_NUMERICHOST'的'socket.getnameinfo()'作爲標誌。 –