ネットワーク関連の関数
IPアドレスをプログラム中のデータとして取り扱うには、文字列として扱うのが一番自然です。しかしパケットヘッダにIPアドレスを含めるには、文字列をバイナリデータに変換する必要があります。
netaddrライブラリを使えば済むのですが、勉強として自作してみました。
IPアドレスの変換
文字列として受け取ったIPアドレスをバイナリに変換します。受け取った文字列を'.'で分割してリストを取得します。そのリストの各要素をmapで整数型に変換してから、pack関数でバイナリとして出力させています。
from struct import * #example "192.168.1.1" -> "00c000a800010001" def ipv4_to_binary(ip_addr): ip_octets = map(int, ip_addr.split(".")) return pack('!4H',ip_octets[0] ,ip_octets[1] ,ip_octets[2] ,ip_octets[3])