python ipaddress模塊簡介


文章目錄
原著
概述
創建Address/Network/Interface
1. IP地址
2. 網段地址
3. 主機接口(CIDR)
Address/Network/Interface成員函數
獲取ip地址的版本,ipv4或者ipv6:
從ip地址獲取網絡地址:
獲取網段中地址數目:
ip_network.hosts迭代獲取可用的主機地址(沒有廣播和0地址)
`netmask/hostmask`來獲取網絡/主機掩碼:
ipv6簡寫/全寫:
網段作為一個列表
比較
轉換成字符串/整數
獲取更多錯誤信息
原著
https://docs.python.org/3.7/howto/ipaddress.html

author: Peter Moody, Nick Coghlan

An introduction to the ipaddress module

概述
本文簡單介紹了python自帶的 ipaddress模塊,只涉及了模塊的基礎部分,更多函數介紹,還是要參考模塊的手冊.

創建Address/Network/Interface
ipaddress模塊是面向對象的。使用前先要創建相應對象。可以使用字符串或者整數來創建如下三種IP地址對象

注:此庫支持ipv4和ipv6

1. IP地址
IP地址,或者叫主機地址,可以使用ipaddress.ip_address() 這個工廠類來創建,會根據傳入的字符串自動的創建IPv4/IPv6地址:

 

 也可以使用正整數來創建地址,默認的,小於2^32認為是IPV4,大於則是IPv6地址:

 

 當然也可以用派生類IPv4Address/IPv6Address強制創建ipv4/ipv6地址:

 

 2. 網段地址

ip/mask表示一個網段,可以使用ip_network創建IPv4/IPv6:

 

 一個網段地址中,主機地址不能被設置,比如192.0.2.1/24就不是一個有效的網段,初始化時程序會拋出一個 ValueError異常. 可以設置參數strict=False來自動的把主機地址置0:

 

 如果使用一個整數來創建網段,則認為這個網段為單ip網段,掩碼為32/128:

 

 As with addresses, creation of a particular kind of network can be forced by calling the class constructor directly instead of using the factory function.

3. 主機接口(CIDR)
通常用cidr表示某個網絡中的某台主機,比如192.0.2.1/24表示192.0.2.0/24網絡中的主機192.0.2.1。ipaddress模塊提供了類接口ip_interface來定義一個主機cidr地址

 

 Address/Network/Interface成員函數

用上面接口定義了IPv(4|6)(Address|Network|Interface)對象,可以調用下面的成員函數來獲取對象的一些屬性.

獲取ip地址的版本,ipv4或者ipv6:

 

 從ip地址獲取網絡地址:

 

 獲取網段中地址數目:

 

 ip_network.hosts迭代獲取可用的主機地址(沒有廣播和0地址)

 

 

 netmask/hostmask來獲取網絡/主機掩碼:

 

 ipv6簡寫/全寫:

 

 


注:對於ipv4地址,依然提供這兩個方法,只是不做處理,原值返回,這樣代碼可以不區分的調用而不會產生異常

網段作為一個列表
一個網段可以通過索引獲取主機地址:

 

 

 


可以判斷某個ip是否在一個網段

# 參考代碼

 

 

 可以寫出如下優雅的代碼

 

 

 


比較
ipaddress重載了>,<等比較運算符

 

 

 注:如果對比不是IPv4和IPv4或者和IPv6地址,會拋出TypeError異常

轉換成字符串/整數

獲取更多錯誤信息
如果使用類工廠來創建IPv4/IPv6對象時,遇到錯誤,只會拋出 ValueError異常,因為類工廠不知道要創建哪種類,所以錯誤提示不是特別明確。如果想得到更多錯誤信息,可以使用原始IPv4/IPv6類來創建對象,這樣會拋出ValueError的子類,比如ipaddress.AddressValueError, ipaddress.NetmaskValueError來通知用戶具體錯誤信息

The error messages are significantly more detailed when using the class constructors directly. For example:

 

 

 


因為這兩個類都有共同的父類ValueError,所以你可以寫如下代碼:

 

 

 

————————————————
版權聲明:本文為CSDN博主「juewuer」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/juewuer/article/details/88062827


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM