笔者要做的是利用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()
转载:https://blog.csdn.net/m0_37872090/article/details/101027191
查看评论