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を使用してこれを行う最良の方法は何ですか? 最終的に、これらの DST IP アドレスを iplookup クエリで実行して、ドメイン名を取得したいと考えています。

  2. 私の理想的なスクリプトは、先頭のタイムスタンプ、SRC アドレス、および DST アドレスをすべて個別に辞書に入れることです。そのキーは「SRC」IP アドレスであり、対応する値は次を含むリストです。 DST アドレスとタイムスタンプ。

私は必ずしもエレガントなスクリプトを探しているわけではありませんが、機能するものを探しています!

(1) の解決策で十分ですが、(2) の解決策はおまけです!

4

3 に答える 3

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'
于 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 に答える