IPy處理ip地址
阿新 • • 發佈:2019-01-25
python的第三方模組IPy可以輔助完成各種IP計算等功能。
安裝IPy
pip install IPy
IP地址基本處理
使用IP類判斷IP型別
IP('10.0.0.1').version()
IP('10.0.0.0/24').version()
IP('::1').version()
輸出4表示IPv4,輸出6表示IPv6
輸出指定網段的IP個數及清單
ip = IP('10.0.0.0/24')
print ip.len()
for x in ip:
print x
常見的IP類方法
輸出反向解析地址格式
ip = IP('192.168.1.50')
ip.reverseName()
輸出:50.1.168.192.in-addr.arpa.
輸出IP型別
ip = IP('192.168.1.50')
ip.iptype()
輸出:PRIVATE(私網),PUBLIC(公網)
轉換為整形格式
ip = IP('192.168.1.50')
ip.int()
輸出:3232235826
轉換為十六進位制格式
ip = IP('192.168.1.50')
ip.strHex()
輸出:0xc0a80132
轉換為二進位制格式
ip = IP('192.168.1.50')
ip.strBin()
十六進位制轉成IP
IP(0xc0a80132)
輸出:192.168.1.50
其他格式也可以這樣轉回去
根據IP與掩碼生產網段格式
IP('192.168.1.0').make_net('255.255.255.0')
IP('192.168.1.0').make_net('255.255.255.254')
輸出:192.168.1.0/24
192.168.1.0/31
其他形式:
IP('192.168.1.0/255.255.255.0', make_net=True)
IP('192.168.1.0-192.168.1.255', make_net=True )
setNormal方法指定引數值返回不同型別的網段格式
setNormal方法指定wantprefixlen引數值,以返回不同格式的網段,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
IP('192.168.1.0/24').strNormal(0)
IP('192.168.1.0/24').strNormal(1)
IP('192.168.1.0/24').strNormal(2)
IP('192.168.1.0/24').strNormal(3)
多網路計算方法
判斷IP地址和網段是否包含在另一網段中
'192.168.1.10' in IP('192.168.1.0/24')
輸出:True(包含),False(不包含)
使用overlaps方法判斷是否兩個網段有重疊
IP('192.168.1.0/24').overlaps('192.168.2.0/24')
輸出:0(不重疊)
IP('192.168.0.0/23').overlaps('192.168.1.0/24')
輸出:1(有重疊)
例項
根據輸入的IP或網段,返回廣播、掩碼、反向解析等資訊。
from IPy import IP
ip_s = raw_input('Please input an IP or net-range: ')
ips = IP(ip_s)
if len(ips) > 1:
print('net: %s' % ips.net())
print('netmask: %s' % ips.netmask())
print('broadcast: %s' % ips.broadcast())
print('reverse address: %s' % ips.reverseNames()[0])
print('subnet: %s' % len(ips))
else:
print('reverse address: %s' % ips.reverseNames()[0])
print('hexadecimal: %s' % ips.strHex())
print('binary ip: %s' % ips.strBin())
print('iptype: %s' % ips.iptype())