Ví dụ ipaddress Python

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 của 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

  • 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

>>> ipaddress.ip_address["127.0.0.1"].is_loopback
True
>>> ipaddress.ip_address["229.100.0.23"].is_multicast
True
>>> ipaddress.ip_address["169.254.0.100"].is_link_local
True
>>> ipaddress.ip_address["240.10.0.1"].is_reserved
True

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

>>> ipa.reverse_pointer
'133.0.0.10.in-addr.arpa'

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

>>> ipa + 1
IPv4Address['10.0.0.134']
>>> ipa - 5
IPv4Address['10.0.0.128']

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ư

>>> int[ipb]
167772296

Đ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 ta một đối tượng

>>> ipc = ipaddress.ip_address[3794067923]
>>> ipc
IPv4Address['226.36.225.211']

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

>>> ipd = ipaddress.ip_address[105253214244521019198275021855725010304]
>>> ipd
IPv6Address['4f2f:81d:dc95:f464:2f09:a97b:f62d:3d80']

Đó 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

>>> ipaddress.ip_address["127.0.0.1"].is_loopback
True
>>> ipaddress.ip_address["229.100.0.23"].is_multicast
True
>>> ipaddress.ip_address["169.254.0.100"].is_link_local
True
>>> ipaddress.ip_address["240.10.0.1"].is_reserved
True
0 trả về một trình vòng lặp, có nghĩa là bạn sẽ phải duyệt qua nó bằng vòng lặp
>>> ipaddress.ip_address["127.0.0.1"].is_loopback
True
>>> ipaddress.ip_address["229.100.0.23"].is_multicast
True
>>> ipaddress.ip_address["169.254.0.100"].is_link_local
True
>>> ipaddress.ip_address["240.10.0.1"].is_reserved
True
1 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

>>> ipaddress.ip_address["127.0.0.1"].is_loopback
True
>>> ipaddress.ip_address["229.100.0.23"].is_multicast
True
>>> ipaddress.ip_address["169.254.0.100"].is_link_local
True
>>> ipaddress.ip_address["240.10.0.1"].is_reserved
True
2 hoặc
>>> ipaddress.ip_address["127.0.0.1"].is_loopback
True
>>> ipaddress.ip_address["229.100.0.23"].is_multicast
True
>>> ipaddress.ip_address["169.254.0.100"].is_link_local
True
>>> ipaddress.ip_address["240.10.0.1"].is_reserved
True
1 với
>>> ipaddress.ip_address["127.0.0.1"].is_loopback
True
>>> ipaddress.ip_address["229.100.0.23"].is_multicast
True
>>> ipaddress.ip_address["169.254.0.100"].is_link_local
True
>>> ipaddress.ip_address["240.10.0.1"].is_reserved
True
4 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

>>> ipaddress.ip_address["127.0.0.1"].is_loopback
True
>>> ipaddress.ip_address["229.100.0.23"].is_multicast
True
>>> ipaddress.ip_address["169.254.0.100"].is_link_local
True
>>> ipaddress.ip_address["240.10.0.1"].is_reserved
True
0 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

>>> ipaddress.ip_address["127.0.0.1"].is_loopback
True
>>> ipaddress.ip_address["229.100.0.23"].is_multicast
True
>>> ipaddress.ip_address["169.254.0.100"].is_link_local
True
>>> ipaddress.ip_address["240.10.0.1"].is_reserved
True
6

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

>>> ipaddress.ip_address["127.0.0.1"].is_loopback
True
>>> ipaddress.ip_address["229.100.0.23"].is_multicast
True
>>> ipaddress.ip_address["169.254.0.100"].is_link_local
True
>>> ipaddress.ip_address["240.10.0.1"].is_reserved
True
8 là 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 các đối số

>>> ipaddress.ip_address["127.0.0.1"].is_loopback
True
>>> ipaddress.ip_address["229.100.0.23"].is_multicast
True
>>> ipaddress.ip_address["169.254.0.100"].is_link_local
True
>>> ipaddress.ip_address["240.10.0.1"].is_reserved
True
9 và
>>> ipa.reverse_pointer
'133.0.0.10.in-addr.arpa'
0

>>> 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.reverse_pointer
'133.0.0.10.in-addr.arpa'
1. Đ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, việc 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.reverse_pointer
'133.0.0.10.in-addr.arpa'
2

>>> 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 về những đồ vật chính cuối cùng do thư viện cung cấp,

>>> ipa.reverse_pointer
'133.0.0.10.in-addr.arpa'
3

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 để lấy địa chỉ IP trong python?

Mô-đun Python Socket để lấy địa chỉ IP từ tên máy chủ . Python socket module gethostbyname[] function accepts hostname argument and returns the IP address in the string format.

Ví dụ về địa chỉ IP là gì?

Địa chỉ IP là một chuỗi số được phân tách bằng dấu chấm. Địa chỉ IP được thể hiện dưới dạng một bộ bốn số — một địa chỉ ví dụ có thể là 192. 158. 1. 38 . Mỗi số trong tập hợp có thể nằm trong khoảng từ 0 đến 255. Vì vậy, phạm vi địa chỉ IP đầy đủ đi từ 0. 0. 0. 0 đến 255. 255. 255. 255.

Làm cách nào để lấy địa chỉ IP làm đầu vào 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 để ping địa chỉ IP trong python?

Đảm bảo bạn đã cài đặt Python trên hệ thống máy tính của mình
Tạo một. tập tin py và hai. tập tin txt. Tệp Python sẽ chứa tập lệnh. Một tệp văn bản sẽ chứa danh sách các địa chỉ IP, các địa chỉ này sẽ được phân tách bằng dấu cách. Tệp văn bản khác sẽ được tập lệnh sử dụng để lưu đầu ra ping

Chủ Đề