Я хочу использовать правило фильтра для захвата только пакетов подтверждения или синхронизации. Как мне это сделать?
В синтаксис фильтра pcap используемый для tcpdump должен работать точно так же с фильтром захвата wirehark.
С tcpdump я бы использовал такой фильтр.
tcpdump "tcp[tcpflags] & (tcp-syn|tcp-ack) != 0"
Проверьте страница руководства tcpdump, и обратите особое внимание на tcpflags.
Обязательно ознакомьтесь с разделами 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'
Ура!
tcpdump 'tcp[13] = 3'
http://danielmiessler.com/study/tcpdump/
Продвинутый
Вы также можете фильтровать на основе определенных частей пакета, а также объединять несколько условий в группы. Первый полезен при поиске только SYN
s или RST
s, например, и последний для еще более продвинутой изоляции трафика.
UAP RSF
[Подсказка: анаграмма для флагов TCP: неквалифицированные злоумышленники пристают к настоящим специалистам по безопасности]
ваша записка: ...
Покажи мне все СРОЧНО (URG
) пакеты ...
tcpdump 'tcp[13] & 32 != 0'
Покажи мне все ПОДТВЕРЖДЕНИЕ (ACK
) пакеты ...
tcpdump 'tcp[13] & 16 != 0'
Покажи мне все PUSH (PSH
) пакеты ...
tcpdump 'tcp[13] & 8 != 0'
Показать все СБРОС (RST
) пакеты ...
tcpdump 'tcp[13] & 4 != 0'
Покажи мне все СИНХРОНИЗИРОВАТЬ (SYN
) пакеты ...
tcpdump 'tcp[13] & 2 != 0'
Покажи мне все ФИНИШ (FIN
) пакеты ...
tcpdump 'tcp[13] & 1 != 0'
Покажи мне все СИНХРОНИЗАЦИЯ / ПОДТВЕРЖДЕНИЕ (SYNACK
) пакеты ...
tcpdump 'tcp[13] = 18'
[Примечание: Только PSH
, RST
, SYN
, и FIN
флаги отображаются в выводе поля флага tcpdump. URG
s и ACK
s отображаются, но они отображаются в другом месте вывода, а не в поле флагов]
Я сделал сценарий, чтобы увидеть топ «синнеров». Для этого я рассматриваю только начальный пакет syn (первый пакет из трех пакетов подтверждения). То есть 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
Я сам хотел получать только SYN-пакеты, использовал следующую команду:
tcpdump -i eth7 'tcp[13] & 2 != 0'
Это должно сработать для вас сразу.
он должен показывать их без каких-либо фильтров и аргументов.