Python網段轉IP,批量處理

筆者要做的是利用Angry IP Scanner對IP進行掃描。可是得到的不是IP,而是網段。筆者說的網段還不是*.*.*.*/X這種格式的,而是1.0.1.0,1.0.3.255這樣的。所以就不能用Python自帶的IIPY模塊。以下是得到的數據和筆者最終的轉化成果(部分):


1.0.1.0,1.0.3.255
1.0.8.0,1.0.15.255
1.0.32.0,1.0.63.255
1.1.0.0,1.1.0.255
1.1.2.0,1.1.7.255
1.1.8.0,1.1.8.255
1.1.9.0,1.1.63.255
1.2.0.0,1.2.1.255


1.0.1.0
1.0.1.1
1.0.1.2
1.0.1.3
1.0.1.4
1.0.1.5
1.0.1.6
1.0.1.7
1.0.1.8


筆者先對得到的7個TXT文件循環處理,將每個文件的網段轉化爲IP,並分爲100份。因爲不分爲100份的話文件太大了,不利用筆者利用。以下是各個函數:

一、將IP地址與數字相互轉化。這樣做的目的是將網段的起始地址轉化爲數字後加1就是下一個地址。

import os

all_ip = {}
fpWriteIP = ''

#將字符串形式的ip地址轉成整數類型。
def ipToLong(ip_str):
    #print map(int,ip_str.split('.'))
    ip_long = 0
    for index,value in enumerate(reversed([int(x) for x in ip_str.split('.')])):
        ip_long += value<<(8*index)
    return ip_long

#將ip的整數類型轉成ip字符串類型
def longToIp(ip_long):
    ip_list = []
    i_1 = ip_long>>24
    i_2 = (ip_long & 0X00FFFFFF)>>16
    i_3 = (ip_long & 0X0000FFFF)>>8
    i_4 = (ip_long & 0X000000FF)
    ip_list.append(i_1)
    ip_list.append(i_2)
    ip_list.append(i_3)
    ip_list.append(i_4)
    ip_str = r'.'.join(map(str,ip_list))
    return ip_str

二、將IP段轉化爲IP,並寫入全局變量的文件中。

#將IP範圍段轉化爲IP輸出
def rangToSpecificIP(start,end):
    for intIP in range(ipToLong(start),ipToLong(end)+1):
        fpWriteIP.write(longToIp(intIP)+'\n')

三、將網段分爲100個部分。

#將當前文件的網段分爲100個部分
def splitAllIP(urlIp):
    fp1 = open(urlIp,'r')    
    for i in range(100):
        all_ip[i] = []
    i = 0
    for line in fp1:
        all_ip[int(i/2000)].append(line.replace('\n',''))
        i = i+1

四、主函數。7個文件循環處理

#主函數
if __name__ == '__main__':
    for j in range(2,7):
        splitAllIP('./all_'+str(j)+'/all_'+str(j)+'.txt')
        i = 0
        for ipRangeSub in all_ip:
            fpWriteIP = open('./all_'+str(j)+'/ipSpecific'+str(i+1)+'.txt', 'w')
            for lineRange in all_ip[ipRangeSub]:
                rangToSpecificIP(lineRange.split(',')[0],lineRange.split(',')[1])
            i = i + 1
        fpWriteIP.close()

 

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