首页
社区
课程
招聘
[原创]python小脚本——乱序IP按照IP段分类
发表于: 2018-4-7 19:30 1982

[原创]python小脚本——乱序IP按照IP段分类

2018-4-7 19:30
1982

5ecurity团队成员tomcat(tomcat@5ecurity.cn)原创发布

原文链接:http://www.5ecurity.cn/index.php/archives/173/

0X00 背景

在甲方公司安全部门,经常迎接上级部门的安全检查。上级部门时不时给扔一堆某扫描器导出的报告,IP大概约有400-500左右。苦逼的要一个个IP查找所属IP段,然后转发给业务部门整改。这活一做就是一天,整个人都不好了。抽空一边百度一边写了一个分类IP的小脚本,和大家分享。

0x01 代码

使用了IP地址处理模块IPy,对IP地址处理起来方便很多。

#!/usr/bin/env python
# -*- encoding: utf-8 -*-

from IPy import IP
import os
from sys import argv
import optparse  
import sys




def get_wenti_ip_list(file_name):                    #从文件读取问题ip列表,每行一个Ip
    fp_wenti_ip = open(file_name,"r")
    value = 0
    ip_list = fp_wenti_ip.readlines()
    for wenti_ip in ip_list:
        wenti_ip = wenti_ip.strip('\n')
        ip_list[value] = wenti_ip
        value = value+1


    fp_wenti_ip.close()
    return ip_list




def get_zichan_ip_list(file_name,ip_list):            #从文件读取IP段列表,要求每一行仅一个IP段,中间用分号隔开
    fp_zichan = open(file_name,"r")
    fp_last = open("end.txt","w")
    new_ip_list = ip_list 


    zichan_IP_list = fp_zichan.readlines()   
    for zichan_ip in zichan_IP_list:
        zichan_ip = zichan_ip.split(';')
        zichan_ip[-1] = zichan_ip[-1].strip('\n') #按照每行来读,处理掉换行符
        for ip in new_ip_list:
            if (IP(ip) >= IP(zichan_ip[-2])) and (IP(ip) <= IP(zichan_ip[-1])): #比较IP是否在某一个段内,如果满足要求,写入最后生成的文件中
                fp_last.write(zichan_ip[0])
                fp_last.write(' ')
                fp_last.write(ip)
                fp_last.write('\n')



    fp_zichan.close()
    fp_last.close()



if __name__ == '__main__':
    parser = optparse.OptionParser(usage = '"usage: %prog problem.txt sources.txt"',version="%prog 1.0")
    default_encoding="utf-8"   #使用utf-8编码,解决中文乱码
    if(default_encoding!=sys.getdefaultencoding()):
        reload(sys)
        sys.setdefaultencoding(default_encoding)
    (options,args) = parser.parse_args()  #参数提示
    if len(args) < 1:
        parser.print_help()
        exit(0)

    wenti_ip_list = get_wenti_ip_list(argv[1])
    get_zichan_ip_list(argv[2],wenti_ip_list)

0x02 使用准备

参数中的problem.txt,为需要分类的IP列表,每行一个IP地址;
参数中的sources.txt,为各业务系统的IP段划分表,每行一个IP段,用分号隔开,
例如:
A系统;10.1.1.1;10.1.1.255
B系统;10.1.2.1;10.1.2.255
......

 

最终保存的分类好的IP保存在同目录下的end.txt

 

效果图:(涉及我司的公网IP地址,自知各位大佬厉害,就打码了。。。)

 

最终图.png

 

ps:小菜初学写脚本,只实现了功能,暂未考虑容错。欢迎各位大佬拍砖!


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2018-4-7 19:30 被cnsecurity编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//