Python ipaddress

Phân tích sâu hơn về trạng thái bảo trì của ipaddress dựa trên nhịp phiên bản PyPI đã phát hành, hoạt động của kho lưu trữ và các điểm dữ liệu khác đã xác định rằng việc bảo trì của nó là Bền vững

Một tín hiệu bảo trì dự án quan trọng cần xem xét đối với ipaddress là nó không thấy bất kỳ phiên bản mới nào được phát hành cho PyPI trong 12 tháng qua và có thể được coi là dự án đã ngừng hoạt động hoặc dự án ít nhận được sự quan tâm từ những người bảo trì dự án.

Trong tháng trước, chúng tôi không tìm thấy bất kỳ hoạt động yêu cầu kéo nào hoặc thay đổi trạng thái vấn đề đã được phát hiện đối với kho lưu trữ GitHub

Nếu bạn làm việc với mạng máy tính sớm hay muộn, bạn sẽ phải học cách làm việc hiệu quả với địa chỉ IP và mạng. Như bạn có thể đoán từ tiêu đề của bài đăng này, chúng ta sẽ học cách tạo, sửa đổi và thực hiện các thao tác trên các đối tượng IP bằng Python

Việc phải thao tác với các đối tượng IP là phổ biến đến mức Python đã kết thúc với một thư viện tích hợp dành riêng cho các tác vụ này. Tên của nó là. chắc bạn cũng đoán ra rồi, tên module là

>>> ipa = ipaddress.ip_address["10.0.0.133"]
>>> ipa
IPv4Address['10.0.0.133']
6. Đúng vậy, tất cả những gì bạn phải làm để bắt đầu làm việc với IP tốt là một dòng,
>>> ipa = ipaddress.ip_address["10.0.0.133"]
>>> ipa
IPv4Address['10.0.0.133']
7, ở đầu tệp mã nguồn của bạn

Làm việc với địa chỉ IP trong chuỗi Python

  • Làm việc với địa chỉ IP trong Python - thư viện ipaddress - phần 1
  • Làm việc với địa chỉ IP trong Python - thư viện ipaddress - phần 2

nội dung

  • Tổng quan về thư viện ipaddress và cách sử dụng cơ bản
  • Làm việc với địa chỉ IP
  • Làm việc với mạng IP
    • Hoạt động cơ bản
    • IP máy chủ mạng
    • Mạng con, siêu mạng và kiểm tra
  • Tóm lược
  • Người giới thiệu
  • Kho lưu trữ GitHub với các tài nguyên cho bài đăng này

Tổng quan về thư viện ipaddress và cách sử dụng cơ bản

Mô-đun

>>> ipa = ipaddress.ip_address["10.0.0.133"]
>>> ipa
IPv4Address['10.0.0.133']
6 bao gồm một số lớp và một số chức năng mô-đun cho phép chúng tôi làm việc với cả đối tượng IPv4 và IPv6

Điều đáng nói là tất cả các loại đối tượng, Địa chỉ, Mạng và IPInterface đều có thể băm được nên có thể được sử dụng làm khóa trong từ điển

Tất cả các ví dụ của tôi sẽ dựa trên IPv4 nhưng hầu hết các chức năng của IPv6 phần lớn giống nhau, ngoại trừ một số phương thức chỉ dành cho IPv6

Tôi cũng đã chọn làm việc với các chức năng tiện lợi của nhà máy, phiên bản IP bất khả tri. Điều này có nghĩa là bạn có thể cung cấp cho họ địa chỉ/mạng IPv4 hoặc IPv6 và bạn sẽ nhận lại đối tượng của lớp phù hợp. Nếu bạn không sử dụng các chức năng gốc, bạn sẽ phải tạo rõ ràng các đối tượng thuộc lớp IPv4* hoặc IPv6* tùy thuộc vào yêu cầu của bạn. e. g

Thay vì

ipa = ipaddress.ip_address["10.10.1.0"]

Bạn sẽ phải sử dụng

ipa = ipaddress.IPv4Address["10.10.1.0"]

Sự tiện lợi này phải trả giá bằng các thông báo lỗi không có nhiều thông tin vì chúng cần xử lý cả IPv4 và IPv6

Bây giờ chúng ta đã biết tại sao nên sử dụng các hàm tiện lợi, hãy xem chúng là gì

  • >>> ipa = ipaddress.ip_address["10.0.0.133"]
    >>> ipa
    IPv4Address['10.0.0.133']
    
    9 - trả về đối tượng của lớp
    >>> ipa.is_private
    True
    >>> ipa.is_global
    False
    
    0 hoặc
    >>> ipa.is_private
    True
    >>> ipa.is_global
    False
    
    1
  • >>> ipa.is_private
    True
    >>> ipa.is_global
    False
    
    2 - trả về đối tượng của lớp
    >>> ipa.is_private
    True
    >>> ipa.is_global
    False
    
    3 hoặc
    >>> ipa.is_private
    True
    >>> ipa.is_global
    False
    
    4
  • >>> ipa.is_private
    True
    >>> ipa.is_global
    False
    
    5 - trả về đối tượng của lớp
    >>> ipa.is_private
    True
    >>> ipa.is_global
    False
    
    6 hoặc
    >>> ipa.is_private
    True
    >>> ipa.is_global
    False
    
    7

Có thể dễ dàng tìm ra hai người đầu tiên đang làm gì. Cái thứ ba cung cấp cho chúng ta các đối tượng tương tự như các đối tượng Mạng nhưng có thêm một số tính năng

Làm việc với địa chỉ IP

Hoạt động cơ bản

Hãy bắt đầu với các hoạt động điều tra trên các đối tượng địa chỉ IP

>>> ipa = ipaddress.ip_address["10.0.0.133"]
>>> ipa
IPv4Address['10.0.0.133']

Chúng tôi tạo các đối tượng địa chỉ IP bằng cách chuyển một chuỗi đại diện cho IP của chúng tôi, những thứ khá chuẩn

Bây giờ, chúng ta có thể làm gì với các đối tượng IP?

Chà, chúng ta có thể kiểm tra xem đó là IP toàn cầu hay riêng tư

>>> ipa.is_private
True
>>> ipa.is_global
False

Chúng tôi thậm chí có thể kiểm tra xem nó có hơi đặc biệt không

>>> ipa = ipaddress.ip_address["10.0.0.133"]
>>> ipa
IPv4Address['10.0.0.133']
6

Chúng ta có thể nhanh chóng tạo con trỏ DNS ngược, rất tiện dụng

>>> ipa = ipaddress.ip_address["10.0.0.133"]
>>> ipa
IPv4Address['10.0.0.133']
7

Và sau đó là số học IP

>>> ipa = ipaddress.ip_address["10.0.0.133"]
>>> ipa
IPv4Address['10.0.0.133']
8

Và nếu bạn có một số ứng dụng hoặc cần, yêu cầu biểu diễn số nguyên của IP, thì đơn giản như

>>> ipa = ipaddress.ip_address["10.0.0.133"]
>>> ipa
IPv4Address['10.0.0.133']
9

Điều này cũng hoạt động theo cả hai cách,

>>> ipa = ipaddress.ip_address["10.0.0.133"]
>>> ipa
IPv4Address['10.0.0.133']
6 sẽ vui vẻ lấy số nguyên và sẽ trả lại cho chúng tôi một đối tượng

>>> ipa = ipaddress.ip_address["10.0.0.133"]
>>> ipa
IPv4Address['10.0.0.133']
1

Và vâng, nó cũng hoạt động với IPv6, nếu đó là sở thích của bạn

>>> ipa = ipaddress.ip_address["10.0.0.133"]
>>> ipa
IPv4Address['10.0.0.133']
2

Đó chủ yếu là về địa chỉ IP mặc dù chúng sẽ xuất hiện trở lại khi chúng ta nói về một số nội dung nâng cao hơn

Làm việc với mạng IP

Tiếp theo trong danh sách của chúng tôi là các đối tượng mạng IP. Chúng tôi có thể làm nhiều hơn nữa ở đây, vì vậy đây sẽ là một phần dài hơn. Chúng ta sẽ bắt tay ngay vào việc tạo ra một số đối tượng và sau đó chúng ta sẽ khám phá xung quanh

Không giống như các đối tượng địa chỉ IP, chúng ta có thể sử dụng các biểu diễn chuỗi khác nhau để tạo một đối tượng

ipa = ipaddress.IPv4Address["10.10.1.0"]
0

Bất kể định dạng nào chúng tôi sử dụng, hiệu ứng cuối cùng sẽ giống nhau. Các nhà cung cấp khác nhau sử dụng các đại diện khác nhau nên thật tuyệt khi mô-đun

>>> ipa = ipaddress.ip_address["10.0.0.133"]
>>> ipa
IPv4Address['10.0.0.133']
6 hỗ trợ tất cả chúng

Hãy tiếp tục chọc ngoáy xung quanh

Lấy lại biểu diễn chuỗi ở định dạng cụ thể

ipa = ipaddress.IPv4Address["10.10.1.0"]
1

Tùy thuộc vào yêu cầu của bạn, bạn có thể nhanh chóng nhận được mạng IP ở định dạng bắt buộc mà không cần phải viết mã tùy chỉnh

Bạn cũng có thể lấy riêng phần mạng và phần mặt nạ. Một lần nữa, với sự hỗ trợ cho các định dạng khác nhau

ipa = ipaddress.IPv4Address["10.10.1.0"]
2

Với những quyền hạn mới có được này, bạn có thể tạo một số ACL của Cisco bằng cách sử dụng các đối tượng của mình

ipa = ipaddress.IPv4Address["10.10.1.0"]
3

Cho đến nay rất tốt, nhưng điều đó vẫn chưa thể hiện được sức mạnh thực sự của mô-đun. Các ví dụ sau sẽ đi sâu vào chức năng nâng cao hơn

IP máy chủ mạng

Với đối tượng mạng trong tay, chúng ta có thể yêu cầu các máy chủ được chứa trong mạng

ipa = ipaddress.IPv4Address["10.10.1.0"]
4

Phương thức

>>> ipa = ipaddress.ip_address["10.0.0.133"]
>>> ipa
IPv4Address['10.0.0.133']
60 trả về một iterator, có nghĩa là bạn sẽ phải duyệt qua nó bằng vòng lặp
>>> ipa = ipaddress.ip_address["10.0.0.133"]
>>> ipa
IPv4Address['10.0.0.133']
61 hoặc chuyển đổi thành một danh sách

Nói chung, tôi khuyên bạn không nên chuyển đổi nó thành danh sách vì điều đó có thể rất tốn tài nguyên cho các mạng lớn hơn

Đây có thể không phải là vấn đề lớn đối với IPv4 nhưng với IPv6, chúng tôi có thể vô tình gặp phải một số vấn đề về hiệu suất

Nếu chúng tôi chỉ cần một vài máy chủ, chúng tôi có thể sử dụng vòng lặp

>>> ipa = ipaddress.ip_address["10.0.0.133"]
>>> ipa
IPv4Address['10.0.0.133']
62 hoặc
>>> ipa = ipaddress.ip_address["10.0.0.133"]
>>> ipa
IPv4Address['10.0.0.133']
61 với
>>> ipa = ipaddress.ip_address["10.0.0.133"]
>>> ipa
IPv4Address['10.0.0.133']
64 nếu máy chủ đến từ giữa phạm vi

ipa = ipaddress.IPv4Address["10.10.1.0"]
5

Thay vào đó, bạn cũng có thể truy cập IP máy chủ cụ thể bằng cách sử dụng toán tử chỉ mục

ipa = ipaddress.IPv4Address["10.10.1.0"]
6

Lưu ý rằng

>>> ipa = ipaddress.ip_address["10.0.0.133"]
>>> ipa
IPv4Address['10.0.0.133']
60 chỉ trả về các IP có thể sử dụng được, nếu bạn muốn lặp lại trên tất cả các máy chủ, bạn có thể thực hiện trực tiếp trên đối tượng mạng

ipa = ipaddress.IPv4Address["10.10.1.0"]
7

Và sau đó là địa chỉ quảng bá mà chúng ta có thể lấy thông qua thuộc tính

>>> ipa = ipaddress.ip_address["10.0.0.133"]
>>> ipa
IPv4Address['10.0.0.133']
66

ipa = ipaddress.IPv4Address["10.10.1.0"]
8

Như bạn có thể thấy mô-đun

>>> ipa = ipaddress.ip_address["10.0.0.133"]
>>> ipa
IPv4Address['10.0.0.133']
6 đang bắt đầu thể hiện sức mạnh của nó. Bây giờ chúng ta sẽ tập trung vào một số hoạt động hữu ích khác

Mạng con, siêu mạng và kiểm tra

Chúng ta sẽ bắt đầu với một thứ rất tiện dụng. Nhanh chóng kiểm tra sự chồng chéo giữa các mạng

ipa = ipaddress.IPv4Address["10.10.1.0"]
9

Bạn có thể sử dụng nó để tối ưu hóa ACL của mình hoặc có thể kiểm tra xem bạn có chồng chéo định tuyến không?

Như bạn có thể thấy

>>> ipa = ipaddress.ip_address["10.0.0.133"]
>>> ipa
IPv4Address['10.0.0.133']
68 là một mối quan hệ hai chiều, nếu ipn1 chồng lên ipn2 thì ipn2 chồng lên ipn1. Nhưng chúng ta có thể chi tiết hơn thế và hỏi rõ ràng xem một mạng là mạng con hay siêu mạng của mạng kia

>>> ipa = ipaddress.ip_address["10.0.0.133"]
>>> ipa
IPv4Address['10.0.0.133']
0

Vì vậy, chúng tôi có thể kiểm tra các thuộc tính khác nhau và so sánh giữa các mạng. chúng ta có thể làm nhiều hơn mặc dù. Chúng tôi có thể lấy supernet của mạng của mình hoặc tạo các mạng con có kích thước cụ thể và thậm chí lấy các mạng con còn lại sau khi mạng cụ thể bị xóa khỏi mạng gốc

Bắt siêu mạng nhanh chóng và dễ dàng nhưng rất mạnh mẽ

>>> ipa = ipaddress.ip_address["10.0.0.133"]
>>> ipa
IPv4Address['10.0.0.133']
1

Làm thế nào tốt là điều đó?

Lấy mạng con cũng tương tự, ngoại trừ chúng ta sẽ lấy iterator trên các mạng con kết quả

>>> ipa = ipaddress.ip_address["10.0.0.133"]
>>> ipa
IPv4Address['10.0.0.133']
2

Theo mặc định, chúng tôi sẽ nhận được trình vòng lặp trên các mạng con lớn nhất có thể. Nếu bạn muốn kích thước cụ thể, bạn có thể sử dụng lại đối số

>>> ipa = ipaddress.ip_address["10.0.0.133"]
>>> ipa
IPv4Address['10.0.0.133']
69 và
>>> ipa = ipaddress.ip_address["10.0.0.133"]
>>> ipa
IPv4Address['10.0.0.133']
70

>>> ipa = ipaddress.ip_address["10.0.0.133"]
>>> ipa
IPv4Address['10.0.0.133']
3

Có một phương pháp thú vị hơn có thể được sử dụng với các đối tượng địa chỉ.

>>> ipa = ipaddress.ip_address["10.0.0.133"]
>>> ipa
IPv4Address['10.0.0.133']
71. Điều này sẽ trả về trình vòng lặp trên các đối tượng mạng còn lại sau khi mạng đã cho bị xóa khỏi mạng gốc

Vì vậy, ví dụ, chúng tôi có 10. 2. 0. 0/23 và chúng tôi chỉ định 10. 2. 1. 0/25 từ nó. Bây giờ chúng tôi muốn biết những mạng nào còn lại để sử dụng trong tương lai sau khi chúng tôi lấy /25

>>> ipa = ipaddress.ip_address["10.0.0.133"]
>>> ipa
IPv4Address['10.0.0.133']
4

Và thế là xong, chúng ta chỉ còn lại 10. 2. 0. 0/24 và 10. 2. 1. 128/25

Cuối cùng, kiểm tra xem địa chỉ IP có thuộc mạng IP hay không được thực hiện với toán tử

>>> ipa = ipaddress.ip_address["10.0.0.133"]
>>> ipa
IPv4Address['10.0.0.133']
72

>>> ipa = ipaddress.ip_address["10.0.0.133"]
>>> ipa
IPv4Address['10.0.0.133']
5

Tóm lược

Đây là phần 1 trong loạt bài hướng dẫn cách làm việc với địa chỉ IP trong Python

Trong phần 2, tôi sẽ thảo luận cuối cùng về các đối tượng chính do thư viện cung cấp,

>>> ipa = ipaddress.ip_address["10.0.0.133"]
>>> ipa
IPv4Address['10.0.0.133']
73

Tôi cũng sẽ nói về các chức năng cấp mô-đun và sau đó chúng ta sẽ xem xét việc so sánh và sắp xếp các đối tượng để cuối cùng kết thúc bằng thảo luận về xác thực và xử lý ngoại lệ

Làm cách nào để sử dụng địa chỉ IP trong python?

Thuật toán .
Nhập mô-đun ổ cắm
Lấy tên máy chủ bằng cách sử dụng ổ cắm. gethostname[] và lưu trữ nó trong một biến
Tìm địa chỉ IP bằng cách chuyển tên máy chủ làm đối số cho ổ cắm. gethostbyname[] và lưu trữ nó trong một biến

Làm cách nào để đặt địa chỉ IP trong python?

Cách thao tác địa chỉ IP trong Python bằng Mô-đun ipaddress .
nhập ipaddress # khởi tạo Địa chỉ IPv4 ip = ipaddress. .
# print Đúng nếu địa chỉ IP là toàn cục print["Là địa chỉ toàn cục. ", ip. .
là toàn cầu. Sai Là liên kết cục bộ. Sai
# in địa chỉ ip tiếp theo[ip + 1] # in địa chỉ ip trước đó[ip - 1]
192. 168. 1. 2 192. 168. 1. 0

Thư viện địa chỉ IP python là gì?

Mô-đun python ipaddress được được sử dụng rộng rãi để xác thực và phân loại địa chỉ IP thành loại IPV4 và IPV6 . Nó cũng có thể được sử dụng để so sánh các giá trị địa chỉ IP cũng như số học địa chỉ IP để thao tác các địa chỉ IP.

Làm cách nào để kiểm tra địa chỉ IP hợp lệ trong python?

Phương thức - 1 Sử dụng phương thức đếm[] .
xác thực hợp lệ_ip [s]
# kiểm tra số tiết
nếu s. đếm['. ']. = 3
trả về 'Địa chỉ IP không hợp lệ'
ip_list = danh sách [bản đồ [str, s. tách ra['. .
# kiểm tra phạm vi của từng số giữa các khoảng thời gian
cho phần tử trong ip_list
nếu int[phần tử] < 0 hoặc int[phần tử] > 255 hoặc [phần tử[0]=='0' và len[phần tử]. =1]

Chủ Đề