Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

ipaddress - Thư viện thao tác IPv4/IPv6 trong Python


Giao thức Internet hiện đang trong quá trình chuyển từ phiên bản 4 sang phiên bản 6. Điều này cần thiết vì phiên bản 4 không cung cấp đủ địa chỉ để xử lý số lượng thiết bị ngày càng tăng có kết nối trực tiếp với internet.

Một địa chỉ IPv4 bao gồm 32 bit, được biểu diễn thành bốn nhóm 8 bit gọi là "octets". Đây là định dạng "dotted decimal" (thập phân phân chấm) nơi mỗi octet 8 bit có thể có giá trị thập phân từ 0 đến 255.

Ví dụ: 192.168.1.1

Địa chỉ IPv4 với ký pháp CIDR: 192.168.1.1/24, trong đó 24 có nghĩa là ba octet đầu xác định mạng và octet cuối xác định nút (node).

Một địa chỉ IPv6 dài 128 bit. Nó dùng ký pháp thập lục phân (hexadecimal). Mỗi vị trí trong địa chỉ IPv6 đại diện cho 4 bit với giá trị từ 0 đến f. 128 bit được chia thành 8 nhóm 16 bit mỗi nhóm, phân tách bằng dấu hai chấm.

Ví dụ: 2001:db8:abcd:100::1/64

Tất cả địa chỉ IPv6 dùng ký pháp CIDR để xác định bao nhiêu bit đầu được dùng để nhận diện mạng và phần còn lại cho nhận diện host/interface.

Thư viện chuẩn Python có module ipaddress cung cấp khả năng tạo, thao tác và vận hành trên địa chỉ và mạng IPv4 và IPv6.

Module cung cấp các hàm factory sau để tạo địa chỉ IP, mạng và interface một cách tiện lợi:

ip_address()

Trả về đối tượng IPv4Address hoặc IPv6Address tùy thuộc vào địa chỉ IP truyền làm đối số. Có thể cung cấp địa chỉ IPv4 hoặc IPv6.

>>> import ipaddress
>>> ipaddress.ip_address('192.168.0.1')
IPv4Address('192.168.0.1')
>>> ipaddress.ip_address('2001:ab7::')
IPv6Address('2001:ab7::')

ip_network()

Trả về đối tượng IPv4Network hoặc IPv6Network tùy thuộc vào địa chỉ IP truyền làm đối số.

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

Trả về đối tượng IPv4Interface hoặc IPv6Interface tùy thuộc vào địa chỉ IP truyền làm đối số.

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

Module ipaddress định nghĩa các lớp sau:

IPv4Address(address)

Constructor này trả về đối tượng địa chỉ IPv4.

Địa chỉ IPv4 hợp lệ được xác định bởi:

  • Một chuỗi ký tự ký pháp decimal-dot (thập phân chấm), bao gồm bốn số nguyên thập phân trong phạm vi 0–255, phân tách bằng dấu chấm (ví dụ: 192.168.0.1).
  • Một số nguyên có biểu diễn nhị phân 32 bit.
  • Một số nguyên đóng gói vào đối tượng bytes độ dài 4 (octet quan trọng nhất trước).
>>> ipaddress.IPv4Address('192.168.0.1')
IPv4Address('192.168.0.1')
>>> ipaddress.IPv4Address(3162581505)
IPv4Address('188.129.42.1')
>>> ipaddress.IPv4Address(b'\xC0\xA8\x00\x01')
IPv4Address('192.168.0.1')

IPv6Address()

Tạo một địa chỉ IPv6.

Địa chỉ IPv6 hợp lệ được cấu thành như sau:

  • Một chuỗi bao gồm tám nhóm bốn chữ số thập lục phân, mỗi nhóm đại diện cho 16 bit. Các nhóm phân tách bằng dấu hai chấm.
  • Một số nguyên vừa với 128 bit.
  • Một số nguyên đóng gói vào đối tượng bytes độ dài 16, big-endian.
>>> ipaddress.IPv6Address('2001:db8::1000')
IPv6Address('2001:db8::1000')
>>> ipaddress.IPv6Address("::abc:7:def")
IPv6Address('::abc:7:def')

Version (Phiên bản)

Trả về số phiên bản phù hợp.

>>> add = ipaddress.IPv4Address('192.168.0.1')
>>> add.version
4
>>> ip = ipaddress.IPv6Address('2001:db8::1000')
>>> ip.version
6