猫型エンジニアのブログ

プログラム/ネットワーク系の技術関連をまとめたページです 

ネットワーク関連の関数

 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])