多網絡計算方法詳解

1、多網絡計算方法詳解

  有時候咱們想比較兩個網段是否存在包含、重疊等關係,好比同網絡但不一樣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

判斷IP地址和網段是否包含於另外一個網段中,以下:

>>> '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

判斷兩個網段是否存在重疊,採用IPy提供的overlaps方法,如:

>>> 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表明不存在重疊

示例:根據輸入的IP或子網返回網絡、掩碼、廣播、反向解析、子網數、IP類型等信息

#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
相關文章
相關標籤/搜索