有个需求,就是把从纯真IP数据库获取到的IP段换算成CIDR格式的。

原来的

201.71.240.0    201.71.240.255  巴西 MD Brazil技术信息与电信公司

要转成

201.71.240.1/24

要用到的模块
netaddr
这里讲一下,我一开始是用IPy这个模块的,但是有时候就会出现这个事情,has invalid prefix length,暂未找到解决办法。

代码如下:(直接用pyinstaller -F ips2cidr.py转成exe使用会很舒服。)

#coding:utf-8
import re
import  IPy
import netaddr
import os
p = re.compile(r'(?:25[0-5]\.|2[0-4]\d\.|[01]?\d\d?\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)')

content = """
please input content here!!!
example:
201.29.179.0      201.29.179.127  巴西  CZ88.NET
201.28.179.0      201.28.179.157  巴西  CZ88.NET

result as:
201.29.179.0/25
201.28.179.0/25
"""


with open("IPS.txt",'w') as  ii:
    ii.write(content)
os.system("IPS.txt")

f = open("IPS.txt")
ips = f.readlines()
f.close()
os.system("del IPS.txt")
for ip_str in ips:
    #print ip_str.strip()
    try:
        ip = p.findall(ip_str)
        startip = ip[0]
        endip = ip[1]
        cidrs = netaddr.iprange_to_cidrs(startip, endip)
        for k, v in enumerate(cidrs):
            iplist = v
            with open("IPS.txt",'a') as  ii:
                ii.write(str(iplist)+"\n")
            print iplist
            break
    except Exception,e:
        pass


os.system("IPS.txt")

发表评论

电子邮件地址不会被公开。 必填项已用*标注