分享一个批量处理防火墙规则的脚本

最近比较忙,大概半个月前,有一名粉丝私信我说,他们的客户给了她一份长达数万条的防火墙log日志,里面记载了防火墙的规则、源ip、目的ip、防火墙行为、协议等信息,并要求她将这个log文件形成Excel表格,按照规则名字、规则下的行为、源ip、目的ip、协议给写出来,要是手动处理的话,不但容易出现披露,而且确实是一件很累人的事儿。

​说实话,那天我也挺忙的,但是出于LSP本能粉丝的事儿就是我的事儿的原则,我还是挑战了一下自己的软肋,因为我写的都是一些不算难的漏洞检测脚本,像这种纯功能性的东西我没写过。

首先看一下事件经过
分享一个批量处理防火墙规则的脚本_第1张图片

分享一个批量处理防火墙规则的脚本_第2张图片

也不知道我写出来她会不会打我,啊哈哈哈,log里面的内容大致是这个格式
分享一个批量处理防火墙规则的脚本_第3张图片

可以很清晰的看出来,是有一定的规律性的,第一列基本就是策略名字,起的很是随意哈,然后就是address 信息、防火墙的动作和对应的协议类型了

理想化输出的表格应该是介个样子的
分享一个批量处理防火墙规则的脚本_第4张图片

一开始的想法就是,先将这些日志读取,然后把我需要用的东西提取到另一个文件里方便我去做list,或者是数组,结果我万万没想到啊,他的策略名称真的就很随意,而且上千条策略名称,我还是年轻了,因为我一开始居然真的想通过手写来去掉重复的策略名称,只保留唯一的,但是几千条我咋写???giao,给大家看一下我设想的第一步,拿到我想要的数据

import os
import xlwt

a = os.getcwd() #获取当前目录
os.chdir('E:/PyCharm 2020.1/new') #定位到新的目录,请根据你自己文件的位置做相应的修改



with open('test.txt','r',encoding = 'utf-8') as fr, open('output.txt','a+',encoding= 'utf-8') as fd:
	for text in fr.readlines():
		str = (text.split()[8:12])

		if "source-address" in str :
			trust_ip= (str[3])
			celue = (str[0])
			#print(celue+"\t"+"trust_ip"+"\t"+trust_ip)
			fd.write(celue+"\t"+"trust_ip"+"\t"+trust_ip+"\n")
		elif "destination-address" in str :
			untrust_ip = (str[3])
			celue = (str[0])
			#print(celue+"\t"+"untrust_ip"+"\t"+untrust_ip)
			fd.write(celue+"\t"+"untrust_ip"+"\t"+untrust_ip+"\n")

		if "application" in text.split() :
			xieyi = text.split()[-1:]
			#print("协议: " ,xieyi)
			fd.write("协议: %s" % (xieyi) + "\n" )
		elif "then" in text.split() :
			xingwei = text.split()[-1:]
			#print("行为:", xingwei)
			fd.write("行为: %s" % (xingwei) + "\n")

book = xlwt.Workbook(encoding='utf-8',style_compression=0)
sheet = book.add_sheet('Output', cell_overwrite_ok=True)

# 向表中添加数据标题
sheet.write(0, 0, '策略名称')  # 其中的'0-行, 0-列'指定表中的单元,
sheet.write(0, 1, 'trust_ip')
sheet.write(0, 2, 'utrust_ip')
sheet.write(0, 3, '协议类型')
sheet.write(0, 4, '行为')

运行的结果就是,会生output.txt文件
分享一个批量处理防火墙规则的脚本_第5张图片
是吧,完全没的说​,当然了,因为时间紧,任务重,我根本没有去考虑他的优化,能实现我能看懂就行了

然而当我知道后面的东西,我就知道这个方案得pass了,导致我写了四个不同的脚本,全部报废,白写了,错误的案例就不展示了,直接展示最终的结果

import os
import xlwt

os.chdir('E:/PyCharm 2020.1/new') #定位到新的目录,请根据你自己文件的位置做相应的修改

book = xlwt.Workbook(encoding='utf-8',style_compression=0)
sheet = book.add_sheet('Output', cell_overwrite_ok=True)

# 向表中添加数据标题
sheet.write(0, 0, '策略名称')  # 其中的'0-行, 0-列'指定表中的单元,
sheet.write(0, 1, 'trust_ip')
sheet.write(0, 2, 'utrust_ip')
sheet.write(0, 3, '协议类型')
sheet.write(0, 4, '行为')

n=1    #自循环anquansaomiao-per-trust_ip
with  open('test.txt','r',encoding= 'utf-8') as fd:
    for text in fd.readlines():
        celue=(text.split()[8:9])#定位策略的名称
        #print(text.split()[8:12])#输出[policy anquansaomiao-per match source-address 10.10.2.66/32]
        ip_name=(text.split()[10:11])#定位ip来源名称、目的地名称、协议名称
        ip = (text.split()[11:12])#定位ip地址、协议名称
        then=(text.split()[9:10])#定位方法
        if "source-address" in ip_name :
            #print(ip)
            sheet.write(n, 0, celue)
            sheet.write(n,1,ip)
        elif "destination-address" in ip_name:
            #print(ip)
            sheet.write(n, 0, celue)
            sheet.write(n,2,ip)
        elif "application" in ip_name:
            #print(ip)
            sheet.write(n, 0, celue)
            sheet.write(n, 3, ip)
        elif "then" in then:
            #print(ip_name)
            sheet.write(n, 0, celue)
            sheet.write(n,4,ip_name)
        n=n+1


book.save('Output.xls')

首先先形成一个空的xls表格,在表格里也是有坐标的
分享一个批量处理防火墙规则的脚本_第6张图片
​如上图所示,以此类推

book = xlwt.Workbook(encoding='utf-8',style_compression=0)
sheet = book.add_sheet('Output', cell_overwrite_ok=True)# 向表中添加数据标题
sheet.write(0, 0, '策略名称')  # 其中的'0-行, 0-列'指定表中的单元,
sheet.write(0, 1, 'trust_ip')
sheet.write(0, 2, 'utrust_ip')
sheet.write(0, 3, '协议类型')
sheet.write(0, 4, '行为')

运行结束后,会生成一个表格,表格的第一行就是我需要的数据标题
在这里插入图片描述
而后进入我的下一步骤,建立一个完整的循环体,直接读取我想要的三要素,由于他的(trust_ip)source-address​、(utrust_ip)destination-address、协议都是在一个下标,这就导致数据必然会重复,当然了,这里指的是获取的时候会需要我自己去识别,可能会多出几个语句

n=1    #自循环anquansaomiao-per-trust_ip
with  open('test.txt','r',encoding= 'utf-8') as fd:
    for text in fd.readlines():
        celue=(text.split()[8:9])#定位策略的名称
        #print(text.split()[8:12])#输出[policy anquansaomiao-per match source-address ]
        ip_name=(text.split()[10:11])#定位ip来源名称、目的地名称、协议名称
        ip = (text.split()[11:12])#定位ip地址、协议名称
        then=(text.split()[9:10])#定位方法
        if "source-address" in ip_name :
            #print(ip)
            sheet.write(n, 0, celue)
            sheet.write(n,1,ip)
        elif "destination-address" in ip_name:
            #print(ip)
            sheet.write(n, 0, celue)
            sheet.write(n,2,ip)
        elif "application" in ip_name:
            #print(ip)
            sheet.write(n, 0, celue)
            sheet.write(n, 3, ip)
        elif "then" in then:
            #print(ip_name)
            sheet.write(n, 0, celue)
            sheet.write(n,4,ip_name)
        n=n+1
​
​
book.save('Output.xls')

首先需要将log文件移动到E:/PyCharm 2020.1/new目录下,这个目录你可以按照自己的来,只需要将脚本里的地址同步一下就可以,而后重命名为test.txt;

text.split()[8:9]  定位下标第八位开始第9为截止,下标从0开始计算,这是一个切片

for循环的目的是,能一行一行的读取test.txt文件,直至把他读完,并且每读一次就会在xls表格插入相应的内容。需要注意的是,Output.xls若是存在会报错,所以用过一次需要将生成的内容重命名或者拿走;

sheet.write(n, 0, celue)  将celue插入倒表格中第n行第0列d​
位置

生成效果如下:
分享一个批量处理防火墙规则的脚本_第7张图片
虽然不是理想状态,但是也算是能看哈​,记录这个东西没别的意思,就是告诉我的广大粉丝朋友们,有什么问题,放心大胆的留言,我看到能解决的会一一答复,毕竟我也不是万能的,你弄个我不会的我也是没招,还有些粉丝朋友在底下骂人的哈,虽然只有那么一个,还是上上上上个月骂得我,但是这个仇我记着呢,天天嘀咕你。最近网安圈风气不太正,希望大家保护好自己,别一时冲动给人当枪使

目前已解决部分粉丝的要求,例如有些粉丝朋友私信我要基线,我也都一一回复并分享了,还有一些报告模板,一些不太难的渗透测试相关的问题,漏洞的复现脚本,复现过程之类的,大家有什么问题和对这个公众号的建议可以在公众号留言哈,留言功能开不起来是因为留言功能在2015年后注册的公众号都取消了这个功能,所以很遗憾没有办法让大家及时互动,另现在我们也有一个小网安圈子,大家若是想进来探讨的可以私信我,我拉大家进群,平时互相吹捧相互进步啥的

最后还是那句话,本人一直以来以公益性分享为主,不会在任何平台向大家索要任何东西,谨防诈骗哦​

你可能感兴趣的:(web安全评估,安全,学习,运维)