IPy
簡介:IPy-用于處理IPv4和IPv6地址和網(wǎng)絡(luò)的類和工具。
API介紹:
IP類允許一個舒適的解析并處理大多數(shù)用于IPv4和IPv6地址和網(wǎng)絡(luò)的符號烫堤。它受到RIPE的Perl模塊NET :: IP界面的極大啟發(fā)欺劳,但不共享實現(xiàn)闸迷。它不共享非CIDR網(wǎng)絡(luò)掩碼晤斩,所以像這樣的時髦網(wǎng)絡(luò)掩碼0xffffff0f無法在這里完成。
安裝
[root@localhost ~]# pip3 install IPy
Collecting IPy
Downloading https://files.pythonhosted.org/packages/88/28/79162bfc351a3f1ab44d663ab3f03fb495806fdb592170990a1568ffbf63/IPy-0.83.tar.gz
Installing collected packages: IPy
Running setup.py install for IPy ... done
Successfully installed IPy-0.83
IP地址網(wǎng)段處理
IPy模塊包含IP類,使用它可以方便處理絕大部分格式為IPv6及IPv4的網(wǎng)絡(luò)和地址僧家。比如通過version方法可以區(qū)分IPv4與IPv6
示例
import IPy
IPy.IP('10.0.0.0/8').version() # 4
IPy.IP('::1').version() # 6
通過指定的網(wǎng)段輸出該網(wǎng)段的IP個數(shù)及所有IP地址清單
示例
from IPy import IP
ip=IP('192.168.1.0/24')
ip.len() # 256 #輸出192.168.1.0/24網(wǎng)段的IP個數(shù)
for x in ip: #輸出192.168.1.0/24網(wǎng)段的所有IP清單
print x
192.168.1.0
192.168.1.1
192.168.1.2
192.168.1.3
IP類的幾個常見的方法,包括反向解析名稱裸删、IP類型八拱、IP轉(zhuǎn)換等
from IPy import IP
ip = IP('192.168.121.1')
ip.reverseNames() #反向解析地址格式
['1.121.168.192.in-addr.arpa.']
ip.iptype() #192.168.121.1為私網(wǎng)類型'PRIVATE'
'PRIVATE'
IP('8.8.8.8').iptype() #8.8.8.8為公網(wǎng)類型
'PUBLIC'
IP('8.8.8.8').int() #轉(zhuǎn)換成整型格式
134744072
IP('8.8.8.8').strHex() #轉(zhuǎn)換成十六進(jìn)制格式
'0x8080808'
IP('8.8.8.8').strBin() #轉(zhuǎn)換成二進(jìn)制格式
'00001000000010000000100000001000'
print(IP(0x8080808)) #十六進(jìn)制轉(zhuǎn)成IP格式
8.8.8.8
IP方法也支持網(wǎng)絡(luò)地址的轉(zhuǎn)換,例如根據(jù)IP與掩碼生成網(wǎng)段格式涯塔,示例:
from IPy import IP
IP('192.168.1.0').make_net('255.255.255.0')
IP('192.168.1.0/24')
IP('192.168.1.0/255.255.255.0',make_net=True)
IP('192.168.1.0/24')
IP('192.168.1.0-192.168.1.255',make_net=True)
IP('192.168.1.0/24')
也可以通過strNormal方法指定不同wantprefixlen參數(shù)值以定制不同輸出類型的網(wǎng)段肌稻。輸出類型為字符串,如下:
wantprefixlen的取值及含義:
wantprefixlen=0,五返回匕荸,如192.168.1.0;
wantprefixlen=1,prefix格式爹谭,如192.168.1.0/24;
wantprefixlen=2,decimalnetmask格式,如192.168.1.0/255.255.255.0;
wantprefixlen=3,lastIP格式榛搔,如192.168.1.0-192.168.1.255诺凡。
from IPy import IP
IP('192.168.1.0/24').strNormal(0)
'192.168.1.0'
IP('192.168.1.0/24').strNormal(1)
'192.168.1.0/24'
IP('192.168.1.0/24').strNormal(2)
'192.168.1.0/255.255.255.0'
IP('192.168.1.0/24').strNormal(3)
'192.168.1.0-192.168.1.255'
判斷IP地址是否在該網(wǎng)絡(luò)內(nèi)
'192.168.13.249' in IP('192.168.0.0/24') # False
'192.168.13.249' in IP('192.168.0.0/16') # True
示例
# coding=utf-8
from IPy import IP
# 輸入ip地址
ip_input = raw_input('Input ip address: ')
ip_address = IP(ip_input)
if len(ip_address) > 1: # 如果長度大于1,表示為網(wǎng)絡(luò)號,非具體的IP地址
print ip_address.net()
print ip_address.broadcast()
print ip_address.netmask()
else:
# 當(dāng)輸入的為IP地址的時候
print ip_address
print ip_address.strBin()
# 輸出
Input ip address: 192.168.8.70
192.168.8.70
11000000101010000000100001000110
# 輸入
Input ip address: 192.168.8.0/24
192.168.8.0
192.168.8.255
255.255.255.0
判斷是否是共有地址或者私有地址
#coding=utf-8
from IPy import IP
ip_input = raw_input("Input IP address:")
ip_address = IP(ip_input)
print ip_address.iptype()
Input IP address:192.168.9.7
PRIVATE
[root@shell auto]# python public_ip.py
Input IP address:10.0.0.8
PRIVATE
[root@shell auto]# python public_ip.py
Input IP address:123.1.2.3
PUBLIC