Ich möchte meine tcpdump
Paketlänge eingrenzen. Ich weiß, dass ich `| grep kann, aber ich frage mich, ob ich diese bestimmte Paketlänge als Option in 'tcpdump' übergeben kann. Ich versuche, ein Skript zu schreiben, das mir mit dem folgenden Befehl alle im Netzwerk vorhandenen MPEG-TS-Multicasts anzeigt:
sudo tcpdump -c 1000 -ti <network_interface> multicast | grep 1316 | sort | uniq
Dieser Befehl funktioniert also und gibt mir genau die Ausgabe, die ich will, aber ich dachte, ich könnte es vereinfachen, indem ich die Länge im tcpdump
Befehl übergebe, etwa so:
sudo tcpdump -c 1000 -ti <network_interface> multicast and length 1316 | sort | uniq
Antwort1
Gesamte Ethernet-Paketgröße
Entsprechendpcap-filter(7)können Sie die folgenden Bedingungen verwenden:
less length
, gleichwertiglen <= length
greater length
, gleichwertiglen >= length
Basierend auf den Beispielen sollten Sie auch verwenden können , aber das ist nicht dokumentiert.
len == length
Beachten Sie, dass dies die Header der Verbindungsschicht und der Netzwerkschicht umfasst (also alles, was erfasst wurde). Eine leere TCP-ACK hat also ein IP-Feld „Gesamtlänge“ von 60, wird aber als insgesamt 74 Bytes angezeigt.
Siehe auch diesen StackOverflow-Thread:https://stackoverflow.com/questions/9874093/how-to-filter-tcpdump-output-based-on-packet-length
Gesamte IP-Paketgröße
Entsprechendtcpdump(1)können Sie auf das Feld „Gesamtlänge“ des IPv4-Headers zugreifen:
ip[2:2] > 576
ip[2:2] <= 1000
- und ähnliches.
Gesamtgröße des UDP-Pakets oder der Nutzlast
UDP hat kein Längenfeld, aber seine Header-Größe ist immer 8, und Sie könnennormalerweisegehen Sie davon aus, dass die IPv4-Headergröße immer 20 beträgt (IPv4-Optionen sindsehrselten, obwohl sie in IGMP verwendet werden).
Wenn Sie also nach 1316-Byte-UDP-Datagrammen filtern möchten,
- IP.Gesamtlänge = IP.Header[20] + UDP.Header[8] + UDP.Payload[1316]
du bekommst den Filter ip[2:2] == 1344
.