tcpdump liest sowohl ipv4- als auch ipv6-Pakete von pcap

641
z0lupka

Ich versuche, einige Informationen aus der Nutzlast von TCP und UDP zu erhalten. Der Filter

(tcp.stream && tcp.flags.push == 1) || udp.stream 

in Wireshark gibt mir sowohl ipv4- als auch ipv6-pakete.

Aber ich kann nicht durch tcpdump herausfinden, wie das geht. Ich habe es versucht:

tcpdump -X 'tcp[tcpflags] & tcp-push != 0 or udp' -r some.pcap 

Es gibt aber nur IPv4-Pakete. So etwas wie

tcpdump -X '((tcp[tcpflags] & tcp-push != 0) or udp) and (ip or ip6)' -r some.pcap 

zeigt auch nur ipv4-pakete an. Alle Beispiele wären hilfreich.

1
Ich denke, das ist ein Fehler in `tcpdump`. kasperd vor 5 Jahren 1

1 Antwort auf die Frage

1
red0ct

Vielleicht hilft es dir:

tcpdump 'ip6[6]==17 or udp or (ip6[6]==6 and ip6[53]&8!=0) or tcp[13]&8!=0' -X -r some.pcap 

In tcpdump können Sie keine ipv6-Pakete abrufen, da Sie keine BPF-Filter (mindestens bis Version 4.9.2) unter ipv6 unterstützen.

So,

  • ip6[6]==17bedeutet udp über ipv6 (das 6. Byte ist das IPv6-Header-Protokollfeld), ip6[6]==6bedeutet jeweils TCP über IPv6 ;

  • ip6[53]&8!=0bedeutet TCP-Push-over-IPv6 (40 Bytes des IPv6-Headers und 13. Byte des Tcp-Headers, das sind TCP-Flags);

  • tcp[13]&8!=0ist das gleiche wie dein tcp[tcpflags] & tcp-push != 0.

Weitere Informationen: ipv6 tcpip pocketguide und hier .

Denken Sie daran (!): Die Verwendung ip6[6]des Protokolls schlägt fehl, wenn Erweiterungsheader vorhanden sind (wie von kasperd angegeben ). Weitere Informationen zu den IPv6-Erweiterungsheatern finden Sie hier . Auf diese Weise werden TCP-Pakete über IPv6 mit Erweiterungsheatern nicht erfasst.

Sie können auch einen eigenen einfachen Filter für bestimmte Zwecke erstellen (z. B. um den letzten Charakter der Nutzlast zu ermitteln):

perl -le 'print map { /(?:Flags \[P\.\]|UDP).*(\S)$/s } split /\d:\d:\d\.\d/, `tcpdump -X -r some.pcap 2>/dev/null`' 
Die Verwendung von "ip6 [6]" zur Identifizierung des Protokolls schlägt fehl, wenn Erweiterungsheader vorhanden sind. "ip6 [53] & 8! = 0" kann immer noch mit Paketen übereinstimmen, die kein TCP sind. kasperd vor 5 Jahren 1
@kasperd Danke, behoben. Über Erweiterungen: Es wurde nicht gesagt, dass dieser Weg vielseitig ist, er kann jedoch nützlich sein. Sie können also gerne mit ipv6 ein vielseitigeres Anwendungsbeispiel für "tcpdump" angeben. Ich werde es gerne benutzen :) red0ct vor 5 Jahren 0