โมดูล ipaddress (Python 3.3+) จัดการ IP Address และ Network แบบ IPv4/IPv6 อย่างถูกต้องและสะดวก
Factory Functions (แนะนำให้ใช้)
ip_address() - สร้าง Address Object
>> import ipaddress
>>> ipaddress.ip_address('192.168.0.1')
IPv4Address('192.168.0.1')
>>> ipaddress.ip_address('2001:ab7::')
IPv6Address('2001:ab7::')
ip_network() - สร้าง Network Object
>> ipaddress.ip_network('192.168.100.0/24')
IPv4Network('192.168.100.0/24')
>>> ipaddress.ip_network('2001:db8:abcd:100::/64')
IPv6Network('2001:db8:abcd:100::/64')
ip_interface() - สร้าง Interface (IP + Network)
>> ipaddress.ip_interface('192.168.100.10/24')
IPv4Interface('192.168.100.10/24')
>>> ipaddress.ip_interface('2001:db8:abcd:100::1/64')
IPv6Interface('2001:db8:abcd:100::1/64')
Class Constructors โดยตรง
IPv4Address
>> ipaddress.IPv4Address('192.168.0.1')
IPv4Address('192.168.0.1')
>>> ipaddress.IPv4Address(3162581505) # integer
IPv4Address('188.129.42.1')
>>> ipaddress.IPv4Address(b'\xc0\xa8\x00\x01') # bytes
IPv4Address('192.168.0.1')
IPv6Address
>> ipaddress.IPv6Address('2001:db8::1000')
IPv6Address('2001:db8::1000')
>>> ipaddress.IPv6Address('::abc:7:def')
IPv6Address('::abc:7:def')
Properties และ Methods
>> addr = ipaddress.IPv4Address('192.168.0.1')
>>> addr.version # 4
>>> addr.is_private # True
>>> addr.is_loopback # False
>>> addr.is_multicast # False
>>> addr.packed # b'\xc0\xa8\x00\x01'
>>> int(addr) # 3232235521
>>> net = ipaddress.IPv4Network('192.168.1.0/24')
>>> net.network_address # IPv4Address('192.168.1.0')
>>> net.broadcast_address # IPv4Address('192.168.1.255')
>>> net.netmask # IPv4Address('255.255.255.0')
>>> net.hostmask # IPv4Address('0.0.0.255')
>>> net.num_addresses # 256
>>> list(net.hosts())[:3] # [IPv4Address('192.168.1.1'), ...]
# Network operations
>>> net1 = ipaddress.IPv4Network('192.168.1.0/24')
>>> net2 = ipaddress.IPv4Network('192.168.1.128/25')
>>> net2.subnet_of(net1) # True
>>> net1.supernet_of(net2) # True
>>> net1.overlaps(net2) # True
IPv6 Specific
>> ip6 = ipaddress.IPv6Address('::1')
>>> ip6.ipv4_mapped # None
>>> ip6.is_loopback # True
>>> ip6.is_link_local # False
>>> ip6.is_site_local # False
>>> ip6.is_multicast # False
>>> net6 = ipaddress.IPv6Network('2001:db8::/32')
>>> net6.subnets(prefixlen_diff=2) # Iterator of /34 subnets
Use Cases
- Validate IP input จากผู้ใช้
- CIDR calculations (subnet, supernet, overlap)
- Network scanning / firewall rules
- Log parsing และ analytics