2017-06-12 137 views
0

我有一個IPv6地址,我想打印一個人們可讀的格式。我如何解碼/打印Python中的IPV6地址

在IPv4地址我也socket.inet_ntoa(...),但在IPv6上,我得到

 
socket.error: packed IP wrong length for inet_ntoa 

+0

除'inet_ntop'外,還可以使用'socket.NI_NUMERICHOST'的'socket.getnameinfo()'作爲標誌。 –

回答

1

使用inet_ntop(它同時適用於IPv4和IPv6),而不是inet_ntoa(這是僅IPv4)。

print(socket.inet_ntop(socket.AF_INET6, socket.inet_pton(socket.AF_INET6, '10::'))) 
1

documentation

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