Pythonメモ

Python3で一定範囲のIPアドレスを生成

IPアドレスを32ビット整数に

>>> struct.unpack('!I', socket.inet_aton('192.168.1.1'))[0]
3232235777

unpackでネットワークバイトオーダを指定しておく。

32ビット整数をIPアドレス(文字列に)

>>> import ipaddress
>>> ip_int = struct.unpack('!I',socket.inet_aton('192.168.1.1'))[0]
>>> str(ipaddress.IPv4Address(ip_int))
'192.168.1.1'
>>> str(ipaddress.IPv4Address(ip_int + 10))
'192.168.1.11'

unpackした時にネットワークバイトオーダを指定しないと、'1.1.168.192'みたいになる。

このへんのは、ここを参考にしました。

一定範囲で

import socket, struct, ipaddress
def ip_range():
    start_ip = '192.168.1.1'    #開始アドレス
    end_ip = '192.168.2.255'    #終了アドレス

    #32ビット整数に
    start_ip_int = struct.unpack('!I', socket.inet_aton(start_ip))[0]
    end_ip_int = struct.unpack('!I', socket.inet_aton(end_ip))[0]

    for dst_ip in range(start_ip_int, end_ip_int + 1):
        print(str(ipaddress.IPv4Address(dst_ip)))

if __name__ == '__main__':
    ip_range()

実行結果

192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
192.168.1.6
192.168.1.7
192.168.1.8
192.168.1.9
192.168.1.10
192.168.1.11
192.168.1.12
192.168.1.13
192.168.1.14
192.168.1.15

結論

WARITOどうでもいい!