Python nhập địa chỉ ip

Tài liệu này nhằm mục đích cung cấp phần giới thiệu nhẹ nhàng về mô-đun

>>> ipaddress.ip_address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv4Address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv6Address(1)
IPv6Address('::1')
0. Nó chủ yếu nhắm đến những người dùng chưa quen với thuật ngữ mạng IP, nhưng cũng có thể hữu ích cho các kỹ sư mạng muốn có cái nhìn tổng quan về cách
>>> ipaddress.ip_address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv4Address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv6Address(1)
IPv6Address('::1')
0 đại diện cho các khái niệm địa chỉ mạng IP

Tạo đối tượng Địa chỉ/Mạng/Giao diện¶

>>> ipaddress.ip_address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv4Address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv6Address(1)
IPv6Address('::1')
0 là một mô-đun để kiểm tra và thao tác với địa chỉ IP, điều đầu tiên bạn muốn làm là tạo một số đối tượng. Bạn có thể sử dụng
>>> ipaddress.ip_address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv4Address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv6Address(1)
IPv6Address('::1')
0 để tạo đối tượng từ chuỗi và số nguyên

Lưu ý về Phiên bản IP¶

Đối với những độc giả không đặc biệt quen thuộc với địa chỉ IP, điều quan trọng cần biết là Giao thức Internet (IP) hiện đang trong quá trình chuyển từ phiên bản 4 của giao thức sang phiên bản 6. Quá trình chuyển đổi này diễn ra phần lớn là do phiên bản 4 của giao thức không cung cấp đủ địa chỉ để xử lý nhu cầu của toàn thế giới, đặc biệt là do số lượng thiết bị có kết nối trực tiếp với internet ngày càng tăng

Giải thích chi tiết về sự khác biệt giữa hai phiên bản của giao thức nằm ngoài phạm vi của phần giới thiệu này, nhưng người đọc ít nhất cần biết rằng hai phiên bản này tồn tại và đôi khi sẽ cần thiết phải buộc sử dụng một hoặc một phiên bản.

Địa chỉ máy chủ IP¶

Địa chỉ, thường được gọi là "địa chỉ máy chủ" là đơn vị cơ bản nhất khi làm việc với địa chỉ IP. Cách đơn giản nhất để tạo địa chỉ là sử dụng chức năng nhà máy

>>> ipaddress.ip_address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv4Address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv6Address(1)
IPv6Address('::1')
4, tự động xác định xem nên tạo địa chỉ IPv4 hay IPv6 dựa trên giá trị được truyền vào

>>> ipaddress.ip_address('192.0.2.1')
IPv4Address('192.0.2.1')
>>> ipaddress.ip_address('2001:DB8::1')
IPv6Address('2001:db8::1')

Địa chỉ cũng có thể được tạo trực tiếp từ số nguyên. Các giá trị phù hợp với 32 bit được coi là địa chỉ IPv4

>>> ipaddress.ip_address(3221225985)
IPv4Address('192.0.2.1')
>>> ipaddress.ip_address(42540766411282592856903984951653826561)
IPv6Address('2001:db8::1')

Để buộc sử dụng địa chỉ IPv4 hoặc IPv6, các lớp liên quan có thể được gọi trực tiếp. Điều này đặc biệt hữu ích để buộc tạo địa chỉ IPv6 cho các số nguyên nhỏ

>>> ipaddress.ip_address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv4Address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv6Address(1)
IPv6Address('::1')

Định nghĩa mạng¶

Các địa chỉ máy chủ thường được nhóm lại với nhau thành các mạng IP, vì vậy,

>>> ipaddress.ip_address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv4Address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv6Address(1)
IPv6Address('::1')
0 cung cấp một cách để tạo, kiểm tra và thao tác các định nghĩa mạng. Các đối tượng mạng IP được xây dựng từ các chuỗi xác định phạm vi địa chỉ máy chủ là một phần của mạng đó. Dạng đơn giản nhất cho thông tin đó là cặp “địa chỉ mạng/tiền tố mạng”, trong đó tiền tố xác định số lượng bit đầu được so sánh để xác định địa chỉ có phải là một phần của mạng hay không và địa chỉ mạng xác định giá trị dự kiến ​​của

Đối với địa chỉ, chức năng xuất xưởng được cung cấp để tự động xác định phiên bản IP chính xác

>>> ipaddress.ip_network('192.0.2.0/24')
IPv4Network('192.0.2.0/24')
>>> ipaddress.ip_network('2001:db8::0/96')
IPv6Network('2001:db8::/96')

Các đối tượng mạng không được đặt bất kỳ bit máy chủ nào. Hiệu quả thực tế của điều này là

>>> ipaddress.ip_address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv4Address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv6Address(1)
IPv6Address('::1')
6 không mô tả mạng. Các định nghĩa như vậy được gọi là các đối tượng giao diện do ký hiệu ip-on-a-network thường được sử dụng để mô tả các giao diện mạng của máy tính trên một mạng nhất định và được mô tả thêm trong phần tiếp theo

Theo mặc định, cố gắng tạo một đối tượng mạng với các bit máy chủ được đặt sẽ dẫn đến việc tăng

>>> ipaddress.ip_address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv4Address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv6Address(1)
IPv6Address('::1')
7. Để yêu cầu các bit bổ sung thay vì bị cưỡng chế về 0, cờ
>>> ipaddress.ip_address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv4Address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv6Address(1)
IPv6Address('::1')
8 có thể được chuyển đến hàm tạo

>>> ipaddress.ip_address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv4Address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv6Address(1)
IPv6Address('::1')
3

Mặc dù dạng chuỗi mang lại sự linh hoạt hơn đáng kể, nhưng mạng cũng có thể được xác định bằng số nguyên, giống như địa chỉ máy chủ. Trong trường hợp này, mạng được coi là chỉ chứa một địa chỉ duy nhất được xác định bởi số nguyên, vì vậy tiền tố mạng bao gồm toàn bộ địa chỉ mạng

>>> ipaddress.ip_address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv4Address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv6Address(1)
IPv6Address('::1')
4

Đối với các địa chỉ, việc tạo một loại mạng cụ thể có thể bị ép buộc bằng cách gọi trực tiếp hàm tạo của lớp thay vì sử dụng hàm xuất xưởng

Giao diện máy chủ¶

Như đã đề cập ở trên, nếu bạn cần mô tả một địa chỉ trên một mạng cụ thể, thì cả địa chỉ và lớp mạng đều không đủ. Ký hiệu như

>>> ipaddress.ip_address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv4Address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv6Address(1)
IPv6Address('::1')
6 thường được sử dụng bởi các kỹ sư mạng và những người viết công cụ cho tường lửa và bộ định tuyến để viết tắt cho “máy chủ
>>> ipaddress.ip_network('192.0.2.0/24')
IPv4Network('192.0.2.0/24')
>>> ipaddress.ip_network('2001:db8::0/96')
IPv6Network('2001:db8::/96')
0 trên mạng
>>> ipaddress.ip_network('192.0.2.0/24')
IPv4Network('192.0.2.0/24')
>>> ipaddress.ip_network('2001:db8::0/96')
IPv6Network('2001:db8::/96')
1”, Theo đó,
>>> ipaddress.ip_address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv4Address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv6Address(1)
IPv6Address('::1')
0 cung cấp một tập hợp các lớp kết hợp liên kết một địa chỉ với một mạng cụ thể. Giao diện để tạo giống hệt với giao diện để xác định các đối tượng mạng, ngoại trừ phần địa chỉ không bị ràng buộc là địa chỉ mạng

>>> ipaddress.ip_address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv4Address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv6Address(1)
IPv6Address('::1')
9

Đầu vào số nguyên được chấp nhận (như với mạng) và có thể bắt buộc sử dụng một phiên bản IP cụ thể bằng cách gọi trực tiếp hàm tạo có liên quan

Kiểm tra Địa chỉ/Mạng/Đối tượng Giao diện¶

Bạn đã gặp rắc rối khi tạo một IPv(4. 6)(Địa chỉ. Mạng. Interface), vì vậy bạn có thể muốn lấy thông tin về nó.

>>> ipaddress.ip_address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv4Address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv6Address(1)
IPv6Address('::1')
0 cố gắng làm cho việc này trở nên dễ dàng và trực quan

Giải nén phiên bản IP

>>> ipaddress.ip_address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv4Address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv6Address(1)
IPv6Address('::1')
1

Lấy mạng từ một giao diện

>>> ipaddress.ip_address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv4Address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv6Address(1)
IPv6Address('::1')
2

Tìm hiểu có bao nhiêu địa chỉ riêng lẻ trong một mạng

>>> ipaddress.ip_address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv4Address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv6Address(1)
IPv6Address('::1')
3

Lặp lại thông qua các địa chỉ "có thể sử dụng" trên mạng

>>> ipaddress.ip_address(3221225985)
IPv4Address('192.0.2.1')
>>> ipaddress.ip_address(42540766411282592856903984951653826561)
IPv6Address('2001:db8::1')
0

Lấy mặt nạ mạng (i. e. đặt các bit tương ứng với tiền tố mạng) hoặc mặt nạ máy chủ (bất kỳ bit nào không phải là một phần của mặt nạ mạng)

>>> ipaddress.ip_address(3221225985)
IPv4Address('192.0.2.1')
>>> ipaddress.ip_address(42540766411282592856903984951653826561)
IPv6Address('2001:db8::1')
1

Bùng nổ hoặc nén địa chỉ

>>> ipaddress.ip_address(3221225985)
IPv4Address('192.0.2.1')
>>> ipaddress.ip_address(42540766411282592856903984951653826561)
IPv6Address('2001:db8::1')
2

Mặc dù IPv4 không hỗ trợ bùng nổ hoặc nén, các đối tượng được liên kết vẫn cung cấp các thuộc tính có liên quan để mã trung lập phiên bản có thể dễ dàng đảm bảo hình thức ngắn gọn nhất hoặc dài dòng nhất được sử dụng cho địa chỉ IPv6 trong khi vẫn xử lý chính xác địa chỉ IPv4

Mạng dưới dạng danh sách Địa chỉ¶

Đôi khi rất hữu ích khi coi các mạng là danh sách. Điều này có nghĩa là có thể lập chỉ mục chúng như thế này

>>> ipaddress.ip_address(3221225985)
IPv4Address('192.0.2.1')
>>> ipaddress.ip_address(42540766411282592856903984951653826561)
IPv6Address('2001:db8::1')
3

Điều đó cũng có nghĩa là các đối tượng mạng cho phép sử dụng cú pháp kiểm tra tư cách thành viên danh sách như thế này

>>> ipaddress.ip_address(3221225985)
IPv4Address('192.0.2.1')
>>> ipaddress.ip_address(42540766411282592856903984951653826561)
IPv6Address('2001:db8::1')
4

Kiểm tra ngăn chặn được thực hiện hiệu quả dựa trên tiền tố mạng

>>> ipaddress.ip_address(3221225985)
IPv4Address('192.0.2.1')
>>> ipaddress.ip_address(42540766411282592856903984951653826561)
IPv6Address('2001:db8::1')
5

So sánh¶

>>> ipaddress.ip_address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv4Address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv6Address(1)
IPv6Address('::1')
0 cung cấp một số cách đơn giản, hy vọng là trực quan để so sánh các đối tượng, nơi nó có ý nghĩa

>>> ipaddress.ip_address(3221225985)
IPv4Address('192.0.2.1')
>>> ipaddress.ip_address(42540766411282592856903984951653826561)
IPv6Address('2001:db8::1')
6

Một ngoại lệ

>>> ipaddress.ip_network('192.0.2.0/24')
IPv4Network('192.0.2.0/24')
>>> ipaddress.ip_network('2001:db8::0/96')
IPv6Network('2001:db8::/96')
5 được đưa ra nếu bạn cố gắng so sánh các đối tượng có phiên bản khác nhau hoặc các loại khác nhau

Sử dụng Địa chỉ IP với các mô-đun khác¶

Các mô-đun khác sử dụng địa chỉ IP (chẳng hạn như

>>> ipaddress.ip_network('192.0.2.0/24')
IPv4Network('192.0.2.0/24')
>>> ipaddress.ip_network('2001:db8::0/96')
IPv6Network('2001:db8::/96')
6) thường không chấp nhận trực tiếp các đối tượng từ mô-đun này. Thay vào đó, chúng phải được ép thành một số nguyên hoặc chuỗi mà mô-đun kia sẽ chấp nhận

>>> ipaddress.ip_address(3221225985)
IPv4Address('192.0.2.1')
>>> ipaddress.ip_address(42540766411282592856903984951653826561)
IPv6Address('2001:db8::1')
7

Nhận thông tin chi tiết hơn khi quá trình tạo phiên bản không thành công¶

Khi tạo các đối tượng địa chỉ/mạng/giao diện bằng cách sử dụng các chức năng của nhà máy không liên quan đến phiên bản, mọi lỗi sẽ được báo cáo là

>>> ipaddress.ip_address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv4Address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv6Address(1)
IPv6Address('::1')
7 với thông báo lỗi chung chỉ đơn giản cho biết giá trị được truyền vào không được nhận dạng là một đối tượng thuộc loại đó. Việc thiếu một lỗi cụ thể là do cần phải biết liệu giá trị được coi là IPv4 hay IPv6 để cung cấp thêm chi tiết về lý do tại sao nó bị từ chối

Để hỗ trợ các trường hợp sử dụng hữu ích khi có quyền truy cập vào chi tiết bổ sung này, các hàm tạo lớp riêng lẻ thực sự nâng các lớp con

>>> ipaddress.ip_address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv4Address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv6Address(1)
IPv6Address('::1')
7
>>> ipaddress.ip_network('192.0.2.0/24')
IPv4Network('192.0.2.0/24')
>>> ipaddress.ip_network('2001:db8::0/96')
IPv6Network('2001:db8::/96')
9 và
>>> ipaddress.ip_address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv4Address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv6Address(1)
IPv6Address('::1')
30 để chỉ ra chính xác phần nào của định nghĩa không thể phân tích chính xác

Các thông báo lỗi chi tiết hơn đáng kể khi sử dụng trực tiếp các hàm tạo của lớp. Ví dụ

>>> ipaddress.ip_address(3221225985)
IPv4Address('192.0.2.1')
>>> ipaddress.ip_address(42540766411282592856903984951653826561)
IPv6Address('2001:db8::1')
8

Tuy nhiên, cả hai trường hợp ngoại lệ cụ thể của mô-đun đều có

>>> ipaddress.ip_address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv4Address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv6Address(1)
IPv6Address('::1')
7 làm lớp cha của chúng, vì vậy nếu bạn không quan tâm đến loại lỗi cụ thể, bạn vẫn có thể viết mã như sau