0

所以,我有一个我的家庭路由器生成的日志文件。它有数百行。每行看起来像这样:(下面的长线)。我想解析这个文件来获取所有的“DST”地址。例如,从下面的行中,DST 地址是“16.99.99.102”

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) 
  1. 使用 Python 执行此操作的最佳方法是什么?最终,我想通过 iplookup 查询运行这些 DST ip 地址以获取域名。

  2. 我理想的脚本是将时间戳、SRC 地址和 DST 地址放在开头,所有这些都分别放入字典中,其键是“SRC”IP 地址,其对应值是包含DST 地址和时间戳。

我不一定要寻找优雅的脚本,而是要寻找可行的东西!

(1) 的解决方案足够好,但 (2) 的解决方案将是一个奖励!

4

3 回答 3

0

Does this work for you:

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'
于 2012-12-10T22:06:50.280 回答
0

对于选项 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()生成的字符串获得更清晰的结果。

于 2012-12-10T22:11:27.123 回答
0

我会为此使用正则表达式

就像是

>>> 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')]
于 2012-12-10T22:11:30.250 回答