Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ipaddress Module ใน Python: จัดการ IPv4 และ IPv6

โมดูล 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