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]==17
bedeutet udp über ipv6 (das 6. Byte ist das IPv6-Header-Protokollfeld),ip6[6]==6
bedeutet jeweils TCP über IPv6 ;ip6[53]&8!=0
bedeutet TCP-Push-over-IPv6 (40 Bytes des IPv6-Headers und 13. Byte des Tcp-Headers, das sind TCP-Flags);tcp[13]&8!=0
ist das gleiche wie deintcp[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`'