在企业安全部门的日常工作中,经常需要处理大量的IP地址,并对它们进行分类管理。这项任务如果手动执行,不仅耗时而且容易出错。为了提高效率,可以编写一个Python脚本来自动化这个过程。
功能
该脚本可以将一系列散乱的IP地址按照预定义的IP段进行分类,并输出到一个文件中。
实现
使用的模块
- IPy:用于处理IP地址和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):
fp_wenti_ip = open(file_name, "r")
ip_list = [line.strip('\n') for line in fp_wenti_ip.readlines()]
fp_wenti_ip.close()
return ip_list
def get_zichan_ip_list(file_name, ip_list):
fp_zichan = open(file_name, "r")
fp_last = open("end.txt", "w")
zichan_IP_list = [line.strip('\n').split(';') for line in fp_zichan.readlines()]
for zichan_ip in zichan_IP_list:
for ip in ip_list:
if (IP(ip) >= IP(zichan_ip[1])) and (IP(ip) <= IP(zichan_ip[2])):
fp_last.write("{} {} \n".format(zichan_ip[0], ip))
fp_zichan.close()
fp_last.close()
if __name__ == '__main__':
parser = optparse.OptionParser(usage='usage: %prog problem.txt sources.txt', version='%prog 1.0')
(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)
使用说明
- problem.txt:包含需要分类的IP列表,每行一个IP地址。
- sources.txt:包含IP段划分表,每行一个IP段,格式为:系统名称;起始IP;结束IP。