marinux
Goto Top

Gawk und regExp

Hallo,

ich habe von tcpdump folgende Ausgabe in einem File stehen:

1327412193.651818 IP (tos 0x0, ttl 64, id 21615, offset 0, flags [DF], proto TCP (6), length 60) 172.16.144.130.44529 > host.sunrpc: S, cksum 0xe4b3 (correct), 2129017670:2129017670(0) win 5840 <mss 1460,sackOK,timestamp 1208105 0,nop,wscale 7>
1327412193.652429 IP (tos 0x0, ttl 63, id 0, offset 0, flags [DF], proto TCP (6), length 60) host.sunrpc > 172.16.144.130.44529: S, cksum 0xac67 (correct), 2314354817:2314354817(0) ack 2129017671 win 5792 <mss 1460,sackOK,timestamp 1234510951 1208105,nop,wscale 2>
1327412193.652445 IP (tos 0x0, ttl 64, id 21616, offset 0, flags [DF], proto TCP (6), length 52) 172.16.144.130.44529 > host.sunrpc: ., cksum 0xf1a0 (correct), 1:1(0) ack 1 win 46 <nop,nop,timestamp 1208105 1234510951>
1327412193.652513 IP (tos 0x0, ttl 64, id 21617, offset 0, flags [DF], proto TCP (6), length 112) 172.16.144.130.44529 > host.sunrpc: P 1:61(60) ack 1 win 46 <nop,nop,timestamp 1208105 1234510951>
1327412193.653142 IP (tos 0x0, ttl 63, id 25829, offset 0, flags [DF], proto TCP (6), length 52) host.sunrpc > 172.16.144.130.44529: ., cksum 0xebea (correct), 1:1(0) ack 61 win 1448 <nop,nop,timestamp 1234510951 1208105>
1327412193.653266 IP (tos 0x0, ttl 63, id 25830, offset 0, flags [DF], proto TCP (6), length 84) host.sunrpc > 172.16.144.130.44529: P 1:33(32) ack 61 win 1448 <nop,nop,timestamp 1234510951 1208105>
1327412193.653279 IP (tos 0x0, ttl 64, id 21618, offset 0, flags [DF], proto TCP (6), length 52) 172.16.144.130.44529 > host.sunrpc: ., cksum 0xf144 (correct), 61:61(0) ack 33 win 46 <nop,nop,timestamp 1208105 1234510951>
1327412193.653341 IP (tos 0x0, ttl 64, id 21619, offset 0, flags [DF], proto TCP (6), length 52) 172.16.144.130.44529 > host.sunrpc: F, cksum 0xf143 (correct), 61:61(0) ack 33 win 46 <nop,nop,timestamp 1208105 1234510951>
1327412193.653360 IP (tos 0x0, ttl 64, id 25547, offset 0, flags [DF], proto TCP (6), length 60) 172.16.144.130.972 > host.hello-port: S, cksum 0xba95 (correct), 2138115298:2138115298(0) win 5840 <mss 1460,sackOK,timestamp 1208105 0,nop,wscale 7>
1327412193.653957 IP (tos 0x0, ttl 63, id 0, offset 0, flags [DF], proto TCP (6), length 60) host.hello-port > 172.16.144.130.972: S, cksum 0xec07 (correct), 2304628567:2304628567(0) ack 2138115299 win 5792 <mss 1460,sackOK,timestamp 1234510951 1208105,nop,wscale 2>

Dieses möchte ich nun aufsplitten wie folgt:

time, ip transmitter, ip receiver, port, protcol, packet length, 

Mittels
     BEGIN {
         FPAT = "([^ ]+)"  
     }
     
     {
         print "NF = ", NF  
         for (i = 1; i <= NF; i++) {
             printf("$%d = <%s>\n", i, $i)  
         }
     }

bekomme ich zumindest schon mal eine Aufsplittung nach Leerzeichen. Ich denke, dass es aber sinnvoller wäre mit Wortsuchen zu arbeiten, falls die Reihenfolgen sich mal ändern. Nur wie stelle ich das am Geschicktesten an? Muss ich dann noch grep bemühen und wie würde es aussehen?

Gruß

Content-ID: 179456

Url: https://administrator.de/contentid/179456

Ausgedruckt am: 22.11.2024 um 05:11 Uhr

marinux
marinux 24.01.2012 um 15:41:14 Uhr
Goto Top
Hallo,

habe es geschafft schon mal nach 'length' zu filtern, mit:

grep -o 'length [0-9]*' traffic.pcap.log  
Dies gibt mir:
length 60
length 60
length 52
length 112
length 52
length 84
length 52
length 52
length 60
length 60

aus.

grep -o 'length [0-9]*' traffic.pcap.log | cut -d ' ' -f2  
das ist die Bereinigung um 'length'.

Jetzt wäre es noch schön, wenn man alles was ich suche in einen Befehl packen könnte, à la


grep -o 'length [0-9]*' & suche nach port & suche nach protocol ... traffic.pcap.log  
Ist eine Verknüpfung so möglich oder muss man den grep-Befehl für jede Suche extra aufrufen?
Das Ganze soll möglichst auch schnell gehen, da große Datenmengen anfallen können. von daher weiß ich nicht, ob es geeignetere Befehle gibt.