如何使用Python从系统日志文件中获取DST地址
所以,我有一个家庭路由器生成的日志文件。它有数百行。每一行都是这样的:(下面的长线)。我想解析这个文件以获得所有的“DST”地址。例如,从下面的行中,DST地址是“16.99.99.102”如何使用Python从系统日志文件中获取DST地址,python,parsing,Python,Parsing,所以,我有一个家庭路由器生成的日志文件。它有数百行。每一行都是这样的:(下面的长线)。我想解析这个文件以获得所有的“DST”地址。例如,从下面的行中,DST地址是“16.99.99.102” 使用Python实现这一点的最佳方法是什么? 最后,我想通过iplookup查询来运行这些DST ip地址,以获得域名 我的理想脚本是将时间戳放在开头,SRC地址和DST地址——所有这些,分别放在一个字典中,字典的键是“SRC”ip地址,对应的值是一个包含DST地址和时间戳的列表 我不一定要寻找一个优雅的脚
(1)的解决方案已经足够好了,但(2)的解决方案将是一个奖励 这对你有用吗:
In [30]: somestr = "Dec 10 16:02:02 ? user.warn kernel: DROP IN=br0 OUT=vlan1 SRC=192.168.1.127 DST=16.99.99.102 LEN=52 TOS=0x00 PREC=0x00 TTL=127 ID=24724 DF PROTO=TCP SPT=62694 DPT=443 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)"
In [31]: somestr.split()
Out[31]:
['Dec',
'10',
'16:02:02',
'?',
'user.warn',
'kernel:',
'DROP',
'IN=br0',
'OUT=vlan1',
'SRC=192.168.1.127',
'DST=16.99.99.102',
'LEN=52',
'TOS=0x00',
'PREC=0x00',
'TTL=127',
'ID=24724',
'DF',
'PROTO=TCP',
'SPT=62694',
'DPT=443',
'WINDOW=8192',
'RES=0x00',
'SYN',
'URGP=0',
'OPT',
'(020405B40103030201010402)']
In [32]: [i for i in somestr.split() if i.startswith("DST")][0].partition('=')[-1]
Out[32]: '16.99.99.102'
对于备选方案A:
如果所有行的格式(和顺序)相同,则可以为每行添加子字符串:
dst=line[line.find(“dst=”)+len(“dst=”):line.find(“len=”)]
对于选项B,您可以在循环中遵循相同的想法:
D = {}
for line in lines:
dst = line[line.find("DST=")+len("DST="):line.find("LEN=")]
src = line[line.find("SRC=")+len("SRC="):line.find("DST=")]
ts = line[:line.find("?")]
D[src] = (dst,ts)
您还可能希望
strip()
结果字符串以获得更清晰的结果。我将使用正则表达式来实现此目的
差不多
>>> xxy = "Dec 10 16:02:02 ? user.warn kernel: DROP IN=br0 OUT=vlan1 SRC=192.168.1.127 DST=16.99.99.102 LEN=52 TOS=0x00 PREC=0x00 TTL=127 ID=24724 DF PROTO=TCP SPT=62694 DPT=443 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)"
>>> re.findall("^([^?]*).*DST=([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)",xxy)
[('Dec 10 16:02:02 ', '16.99.99.102')]
>>> xxy = "Dec 10 16:02:02 ? user.warn kernel: DROP IN=br0 OUT=vlan1 SRC=192.168.1.127 DST=16.99.99.102 LEN=52 TOS=0x00 PREC=0x00 TTL=127 ID=24724 DF PROTO=TCP SPT=62694 DPT=443 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)"
>>> re.findall("^([^?]*).*DST=([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)",xxy)
[('Dec 10 16:02:02 ', '16.99.99.102')]