python學習—— IPy 強大的IP地址解析模塊

       最近在忙着做計算機網絡的課程設計,打算寫一個可以掃描內網主機的掃描工具。學習過程中安利到了許多python新姿勢,IPy模塊就是其中一個。

1.IPy模塊。

       在IP地址規劃中,涉及到計算大量的IP地址,包括網段、網絡掩碼、廣播地址、子網數、IP類型等別擔心,IPy模塊拯救你。IPy模塊可以很好的輔助我們高效的完成IP的規劃工作,它是專門用來處理IP地址的模塊。
       安裝:

pip install IPy

2.功能。

(1)通過version分辨IP地址版本。

>>> import IPy
>>> IPy.IP('10.0.0.0/8').version()
4
>>> IPy.IP('::1').version()
6

(2)通過指定的網段輸出該網段的IP個數和所有的IP地址清單。

>>> ip = IPy.IP("192.168.1.0/24")
>>> print(ip.len())
256
>>> for x in ip:
	print(x)

(3)反向解析名稱、IP類型、IP轉換等。

>>> ip = IPy.IP("192.168.1.107")
>>> ip.reverseName()         #反向解析IP
'107.1.168.192.in-addr.arpa.'
>>> ip.iptype()              #判斷IP地址的公私類型
'PRIVATE'
>>> ip.int()                 #將IP轉換成整型
3232235883
>>> ip.strHex()              #將IP轉換成十六進制
'0xc0a8016b'    
>>> ip.strBin()              #將IP轉換成二進制
'11000000101010000000000101101011'
>>> IPy.IP(3232235883)       #將二進制轉換整型IP地址
IP('192.168.1.107')
>>> IPy.IP('0xc0a8016b')     #將十六進制轉換整型IP地址
IP('192.168.1.107')

(4)根據IP和掩碼產生網段格式。

>>> print(IPy.IP('192.168.1.0').make_net('255.255.255.0'))
192.168.1.0/24
>>> print(IPy.IP('192.168.1.0/255.255.255.0',make_net = True))
192.168.1.0/24
>>> print(IPy.IP('192.168.1.0-192.168.1.255',make_net = True))
192.168.1.0/24

(5)輸出類型的網段。

>>> print(IPy.IP('192.168.1.0/24').strNormal(0))    #無返回
192.168.1.0
>>> print(IPy.IP('192.168.1.0/24').strNormal(1))    #返回#prefix格式
192.168.1.0/24
>>> print(IPy.IP('192.168.1.0/24').strNormal(2))    #返回#decimalnetmask格式
192.168.1.0/255.255.255.0
>>> print(IPy.IP('192.168.1.0/24').strNormal(3))    #返回lastIP格式
192.168.1.0-192.168.1.255

(6)比較IP大小。

>>> from IPy import IP
>>> IP('10.0.0.0/24') < IP('12.0.0.0/24')
True

(7)判斷IP地址是否包含於一個網段中。

>>> IP('192.168.1.107') in IP('192.168.1.0/24')
True
>>> IP('192.168.2.107') in IP('192.168.1.0/24')
False

(8)判斷網絡是否存在重疊。

>>> 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/24')
0  #返回0代表不存在重疊!

3.項目實戰。

       在完成主機掃描的過程中我主要用到了IPy來生成地址池,下面是我的代碼:

import IPy
def makeIpPool(startIP, lastIP,IPv6=False):
    '''生產 IP 地址池'''
    IPver = 6 if IPv6 else 4   #判斷IP地址是否爲IP類型默認爲IPv4
    intIP = lambda ip: IPy.IP(ip).int()  # 將IP地址轉換爲整型格式
    ipPool = {IPy.intToIp(ip, IPver) for ip in range(intIP(startIP), intIP(lastIP) + 1)}
    print(len(ipPool))
    print(ipPool)
makeIpPool('192.168.1.1','192.168.1.255')

       這個代碼將自動生成192.168.1.0這個網段的所有IP地址並且以列表的形式存儲。其中IPy.intToIp(ip, IPver)主要用來將IP地址從整型格式轉爲點分十進制表示法,第一個參數爲IP整型格式,第二個參數爲要轉的IP地址類型,可以是4或者6。
       IPy模塊還有更多的功能等待着你我去探究。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章