有時候咱們想比較兩個網段是否存在包含、重疊等關係,好比同網絡但不一樣prefixlen會認爲是不相等的網段,如10.0.0.0/16不等於10.0.0.0/24,另外即便具備相同的prefixlen但處於不一樣的網絡地址,一樣也視爲不相等,如10.0.0.0/16不等於192.0.0.0/16。IPy支持相似於數值型數據的比較,以幫助IP對象進行比較,如:python
>>> IP('10.0.0.0/24') < IP('12.0.0.0/24') True
>>> '192.168.1.100' in IP('192.168.1.0/24') True >>> IP('192.168.1.0/24') in IP('192.168.0.0/16') True
>>> IP('192.168.0.0/23').overlaps('192.168.1.0/24') 1 #返回1表明存在重疊 >>> IP('192.168.1.0/24').overlaps('192.168.2.0') 0 #返回0表明不存在重疊
#1/usr/bin.env python from IPy import IP #接收用戶輸入,參數爲IP地址或網段地址 ip_s = 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.broadcast()) #輸出地址反向解析 print('subnet: %s' %len(ips)) #輸出網絡子網數 else: #爲單個IP地址 print('reverse address: %s' %ips.reverseNames()[0]) #輸出IP反向解析 print('hexadecimal: %s' %ips.strHex()) #輸出十六進制地址 print('binary ip: %s' %ips.strBin()) #輸出二進制地址 print('iptype: %s' %ips.iptype()) #輸出地址類型,輸出地址類型,如PRIVATE、PUBLIC、LOOPBACK等
分別輸入網段、IP地址的運行返回結果以下:網絡
[root@localhost test]# python simple1.py Please input an IP or net-range: 192.168.1.0/24 net: 192.168.1.0 netmask: 255.255.255.0 broadcast: 192.168.1.255 reverse address: 192.168.1.255 subnet: 256 hexadecimal: 0xc0a80100 binary ip: 11000000101010000000000100000000 iptype: PRIVATE [root@localhost test]# python simple1.py Please input an IP or net-range: 192.168.1.20 reverse address: 20.1.168.192.in-addr.arpa. hexadecimal: 0xc0a80114 binary ip: 11000000101010000000000100010100 iptype: PRIVATE