1. 程式人生 > >IPy處理ip地址

IPy處理ip地址

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())