2012-12-10 40 views
0

所以,我有一個我的家庭路由器生成的日誌文件。它有數百行。每條線看起來像這樣:(下面的長線)。我想解析這個文件來獲得所有的「DST」地址。例如,從下面的路線,DST地址爲「16.99.99.102」如何使用Python從系統日誌文件中獲取DST地址

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)的解決方案將是一個獎勵!

回答

0

爲你做這項工作:

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' 
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()產生的字符串以獲得更清晰的結果。

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')] 
相關問題