Я хочу использовать правило фильтра для захвата только пакетов подтверждения или синхронизации. Как мне это сделать?
Я хочу использовать правило фильтра для захвата только пакетов подтверждения или синхронизации. Как мне это сделать?
Ответы:
Синтаксис PCAP фильтра используется для ТСРйитра должен работать точно так же , как на захват Wireshark фильтра.
С tcpdump я бы использовал такой фильтр.
tcpdump "tcp[tcpflags] & (tcp-syn|tcp-ack) != 0"
Посетите справочную страницу tcpdump и обратите пристальное внимание на флаги tcpdump.
Обязательно ознакомьтесь с разделами в Wireshark Wiki о фильтрах захвата и отображения. К сожалению, два типа фильтров используют совершенно разный синтаксис и разные имена для одной и той же вещи.
Если вы хотите использовать фильтр отображения вместо фильтра захвата, вам, вероятно, потребуется создать выражение, объединяющее tcp.flags.ack и tcp.flags.syn. Я гораздо лучше знаком с фильтрами захвата, так что вам придется решить это самостоятельно.
Хотя ответ @ Zoredache хорош и полон, обратите внимание, что этот синтаксис приведет к любым пакетам с установленным флагом TCP SYN или TCP ACK, включая пакеты, которые не являются просто простыми пакетами «TCP SYN» или «TCP ACK», поскольку они также есть другие флаги. Это может или не может быть тем, что вы (или будущие читатели) намеревались. Например, этот синтаксис также будет захватывать пакеты TCP SYN-ACK, TCP FIN-ACK и т. Д. Если вы хотите использовать только пакеты TCP SYN или TCP ACK (т. Е. Просто установить один из этих флагов), правильный синтаксис фильтра захвата:
'tcp[tcpflags] == tcp-syn or tcp[tcpflags] == tcp-ack'
Эквивалентное:
'tcp[13] == 2 or tcp[13] == 16'
Ура!
Я сделал скрипт, чтобы увидеть топ "синерз". Для этого я рассматриваю только начальный пакет синхронизации (первый пакет из трех пакетов рукопожатия). То есть 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/
продвинутый
Вы также можете фильтровать на основе определенных частей пакета, а также объединить несколько условий в группы. Первый полезен, например, при поиске только SYN
s или RST
s, а второй - для еще более сложной изоляции трафика.
UAP RSF
[Подсказка: анаграмма для флагов TCP: неопытные злоумышленники Pester Real Security Folk]
ваша записка: ...
Показать мне все СРОЧНЫЕ ( URG
) пакеты ...
tcpdump 'tcp[13] & 32 != 0'
Показать все ACK
пакеты ACKNOWLEDGE ( ) ...
tcpdump 'tcp[13] & 16 != 0'
Покажите мне все PSH
пакеты PUSH ( ) ...
tcpdump 'tcp[13] & 8 != 0'
Показать все RST
пакеты RESET ( ) ...
tcpdump 'tcp[13] & 4 != 0'
Показать все SYN
пакеты SYNCHRONIZE ( ) ...
tcpdump 'tcp[13] & 2 != 0'
Показать все FIN
пакеты FINISH ( ) ...
tcpdump 'tcp[13] & 1 != 0'
Показать все SYNACK
пакеты SYNCHRONIZE / ACKNOWLEDGE ( ) ...
tcpdump 'tcp[13] = 18'
[ Примечание: Только PSH
, RST
, SYN
, и FIN
флаги отображаются в поле вывода флага TCPDUMP в. URG
s и ACK
s отображаются, но они отображаются в другом месте вывода, а не в поле флагов]
Я хотел получить только пакеты SYN самостоятельно, я использовал следующую команду:
tcpdump -i eth7 'tcp[13] & 2 != 0'
Это должно работать для вас сразу.
tcpdump -s SIZE
. Заголовок TCP может иметь переменную длину, поэтому при захвате-s 128
будут получены все возможные заголовки и, возможно, немного данных.