-1
私はIPv4アドレスを持っていて、それを32ビット整数に変換したい。 私はsocket.inet_ntopを使用してIPv4アドレスを文字列に変換してから、その文字列を32ビット整数
に変換できますが、直接の方法はありますか?Python:パケットオブジェクト/ inetオブジェクトを32ビット整数に変換する
私はIPv4アドレスを持っていて、それを32ビット整数に変換したい。 私はsocket.inet_ntopを使用してIPv4アドレスを文字列に変換してから、その文字列を32ビット整数
に変換できますが、直接の方法はありますか?Python:パケットオブジェクト/ inetオブジェクトを32ビット整数に変換する
基本形式のIPv4アドレスは、で、ネットワークバイトオーダーの32ビット整数です。 私はあなたがバイトのシーケンスとしてそれを持っていると仮定しています(なぜなら、それはあなたが通常inet_ntop
に手渡すからです)。
struct
モジュールとそのunpack
メソッドは、 "!I"フォーマット仕様(ネットワークバイトオーダー、符号なし32ビット整数を意味します)と一緒にPython整数に変換する必要があります。このコードを参照してください。
from socket import inet_ntop, inet_pton, AF_INET
from struct import unpack
ip = inet_pton(AF_INET, "192.168.1.42")
ip_as_integer = unpack("!I", ip)[0]
print("As string[{}] => As bytes[{}] => As integer[{}]".format(
inet_ntop(AF_INET, ip), ip, ip_as_integer))
あなたは可能性があり、もちろんバイト単位の整数を再構築:
ip_as_integer = (ip[0] << 24) | (ip[1] << 16) | (ip[2] << 8) | ip[3]