Ich möchte eine Filterregel verwenden, um nur Bestätigungs- oder Synchronisierungspakete zu erfassen. Wie mache ich das?
Ich möchte eine Filterregel verwenden, um nur Bestätigungs- oder Synchronisierungspakete zu erfassen. Wie mache ich das?
Antworten:
Die für tcpdump verwendete pcap-Filtersyntax sollte beim wireshark capture-Filter genau so funktionieren.
Mit tcpdump würde ich einen Filter wie diesen verwenden.
tcpdump "tcp[tcpflags] & (tcp-syn|tcp-ack) != 0"
Schauen Sie sich die tcpdump-Manpage an und achten Sie genau auf die tcpflags.
Lesen Sie auch die Abschnitte im Wireshark Wiki über Erfassungs- und Anzeigefilter. Leider verwenden die beiden Filtertypen eine völlig andere Syntax und unterschiedliche Namen für dasselbe Objekt.
Wenn Sie einen Anzeigefilter anstelle eines Erfassungsfilters wünschen, müssen Sie wahrscheinlich einen Ausdruck erstellen, der tcp.flags.ack und tcp.flags.syn kombiniert. Ich kenne mich mit Capture-Filtern weitaus besser aus, daher musst du das selbst herausfinden.
Die Antwort von @ Zoredache ist schön und vollständig. Beachten Sie jedoch, dass diese Syntax alle Pakete liefert, für die das TCP-SYN- oder das TCP-ACK-Flag gesetzt ist, einschließlich der Pakete, die nicht nur reine "TCP-SYN" - oder "TCP-ACK" -Pakete sind auch haben andere Flaggen - Set. Dies kann oder kann nicht das sein, was Sie (oder zukünftige Leser) beabsichtigt haben. Diese Syntax erfasst beispielsweise auch TCP-SYN-ACK-Pakete, TCP-FIN-ACK usw. Wenn Sie nur TCP-SYN- oder TCP-ACK-Pakete (dh NUR eines dieser Flags) festlegen möchten, lautet die korrekte Erfassungsfiltersyntax:
'tcp[tcpflags] == tcp-syn or tcp[tcpflags] == tcp-ack'
Äquivalent:
'tcp[13] == 2 or tcp[13] == 16'
Prost!
Ich habe ein Skript erstellt, um die Top-"Synner" zu sehen. Dafür betrachte ich nur das anfängliche Syn-Paket (das erste Paket des Drei-Pakete-Handshakes). Das heißt, syn = 1, ack = 0
while :; do
date;
tcpdump -i eth1 -n -c 100 \
'tcp[tcpflags] & (tcp-syn) != 0' and
'tcp[tcpflags] & (tcp-ack) == 0' 2> /dev/null \
| awk '{ print $3}' \
| sort | uniq -c | sort | tail -5;
echo;
sleep 1
done
tcpdump 'tcp[13] = 3'
http://danielmiessler.com/study/tcpdump/
Fortgeschritten
Sie können auch nach bestimmten Teilen eines Pakets filtern und mehrere Bedingungen in Gruppen zusammenfassen. Ersteres ist nützlich, wenn Sie beispielsweise nur nach SYN
s oder RST
s suchen , und letzteres für eine noch weitergehende Verkehrsisolation.
UAP RSF
[Hinweis: Ein Anagramm für die TCP-Flags: Unqualifizierte Angreifer belästigen echte Sicherheitsleute]
Ihr Memo: ...
Zeige mir alle DRINGEND ( URG
) Pakete ...
tcpdump 'tcp[13] & 32 != 0'
Zeige mir alle ACKNOWLEDGE ( ACK
) Pakete ...
tcpdump 'tcp[13] & 16 != 0'
Zeige mir alle PUSH ( PSH
) Pakete ...
tcpdump 'tcp[13] & 8 != 0'
Zeige mir alle RESET ( RST
) Pakete ...
tcpdump 'tcp[13] & 4 != 0'
Zeige mir alle SYNCHRONIZE ( SYN
) -Pakete ...
tcpdump 'tcp[13] & 2 != 0'
Zeige mir alle FINISH ( FIN
) Pakete ...
tcpdump 'tcp[13] & 1 != 0'
Alle SYNCHRONIZE / ACKNOWLEDGE ( SYNACK
) -Pakete anzeigen ...
tcpdump 'tcp[13] = 18'
[ Anmerkung: Nur die PSH
, RST
, SYN
und FIN
Fahnen in der tcpdump - Flag - Feld Ausgabe angezeigt werden. URG
s und ACK
s werden angezeigt, aber sie werden an anderer Stelle in der Ausgabe und nicht im Flags-Feld angezeigt.]
Ich wollte nur SYN-Pakete selbst bekommen, ich habe den folgenden Befehl verwendet:
tcpdump -i eth7 'tcp[13] & 2 != 0'
Dies sollte sofort für Sie funktionieren.
Es sollte sie ohne Filter oder Argumente anzeigen.
tcpdump -s SIZE
. Der TCP-Header kann eine variable Länge haben, daher werden bei der Erfassung-s 128
wahrscheinlich alle möglichen Header und möglicherweise ein wenig Daten abgerufen.