2017-06-12 8 views
0

私はIPv6アドレスを持っており、人間が読める形式でプリントしたいと思います。 IPv4アドレスでPythonでIPV6アドレスをデコード/プリントするには

私はsocket.inet_ntoa(...)をしましたが、IPv6の上で、私は(IPv4のみである)の代わりにinet_ntoaの(IPv4とIPv6の両方のために働く)

 
socket.error: packed IP wrong length for inet_ntoa 

+0

'inet_ntop'に加えて、' socket.NI_NUMERICHOST'をフラグとして 'socket.getnameinfo()'を使うこともできます。 –

答えて

1

使用inet_ntopを取得します。

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をサポートしておらず、IPv4/v6デュアルスタック サポートの代わりにinet_ntop()を使用する必要があります。

ライブラリIPyは、IPv4とIPv6の世話をするために使用できます。

>>> print(IP('1080:0:0:0:8:800:200C:417A')) 
1080::8:800:200c:417a