我有一个来自防火墙的txt格式的日志文件,例如:
src=10.10.10.1 srcPort=15003 dst=20.20.20.1 service=443 host=FirewalName proto=tcp
src=30.30.30.1 srcPort=18003 dst=40.40.40.1 service=8080 host=FirewalName proto=tcp
我已经构建了正则表达式来提取我需要的信息(src,dst,service),但是我需要能够加入正则表达式的输出并将输出写入文件,每个文件夹之间有一个选项卡。每个service = object之前的“TCP”,对于日志文件中的每一行,所以新文件的输出如下所示:
10.10.10.1 20.20.20.1 TCP 443
30.30.30.1 40.40.40.1 TCP 8080
另外,我需要能够区分输入文件的service =部分中的“TCP
”和“UDP
”,以便写入输出文件的内容正确示例:如果输入文件的第三行是:
src=50.50.50.1 srcPort=21003 dst=60.60.60.1 service=161 host=FirewalName proto=udp
我被困在这里需要帮助。
import re
import sys
with open("SFD-IPs.txt", "r") as file:
text = file.read()
sources = re.findall(r'src=(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})', text)
dest = re.findall(r'dst=(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})', text)
service = re.findall(r'service=(\d+)', text)
with open("output.txt", "w") as TufinReq:
TufinReq.write(sIP)
f=open("output.txt", "r")
del_list = ["src=", "dst=", "service="]
list = []
for line in f:
for word in del_list:
if word in line:
line = line.replace(word, "")
list.append(line)
f.close()
f=open("output.txt", "w+")
for line in list:
f.write(line)
f.close()
答案 0 :(得分:1)
首先,您需要拆分sources
和dest
的每个项目以检索所需的数据,如下所示:
sources = [item.split('=')[1] for item in sources]
dest = [item.split('=')[1] for item in dest]
现在您可以使用zip()
内置函数,如下所示:
with open('output.txt', 'w') as f:
for item in zip(sources, dest, service):
f.write('{}\t{}\tTCP\t{}\n'.format(*item))
如果您还要添加协议,您可以执行以下操作:
proto = re.findall(r'proto=(\w+)', text)
proto = [item.upper() for item in proto]
with open('output.txt', 'w') as f:
for item in zip(sources, dest, proto, service):
f.write('{}\t{}\t{}\t{}\n'.format(*item))
<强>输出:强>
output.txt
文件的内容:
text = '''src=10.10.10.1 srcPort=15003 dst=20.20.20.1 service=443 host=FirewalName proto=tcp
src=30.30.30.1 srcPort=18003 dst=40.40.40.1 service=8080 host=FirewalName proto=tcp
src=50.50.50.1 srcPort=21003 dst=60.60.60.1 service=161 host=FirewalName proto=udp'''
是这样的:
10.10.10.1 20.20.20.1 TCP 443
30.30.30.1 40.40.40.1 TCP 8080
50.50.50.1 60.60.60.1 UDP 161
答案 1 :(得分:0)
你可以用一个正则表达式搜索完成这个并用一个更简单的模式替换。
正则表达式:
src=([\d\.]+).*dst=([\d\.]+).*service=(\d+).*proto=(.*)
替换字符串:
$1 $2 $4 $3