Утилита tcpdump уже давно является главной опорой системных администраторов при разрешении проблем и наблюдении за безопасностью в сети. Во всех странах мира специалисты по компьютерной безопасности клянутся в верности этой полезной программе.
tcpdump — это простая утилита командной строки, которая на первый взгляд выглядит довольно бледно по сравнению с другими анализаторами трафика вроде Ettercap и Wireshark, обладающими функциями мониторинга пакетов и удобным интерфейсом. В отличие от этих приложений tcpdump выполняется в терминале, где задаются все необходимые параметры, и выводит результаты в стандартной форме командной строки. Некоторым пользователям эта утилита может показаться примитивной, но она обладает возможностями и гибкостью, недоступными аналогичным программам с обычным интерфейсом.
Аргументы
Утилита tcpdump предлагает огромный выбор аргументов, но я здесь расскажу только о некоторых из них.
-A: печатать каждый пакет в ASCII-коде. -c N, где N — число: завершить работу после N пакетов. -i interface: прослушивать определенный сетевой интерфейс. -n: не идентифицировать IP-адреса с доменными именами. -q: менее подробный вывод (от «quiet» — «спокойный») в виде коротких строк текста. -r имя_файла: чтение пакетов из определенного файла, а не из сетевого интерфейса. Эта опция обычно используется после записи необработанных пакетов в файл с помощью аргумента -w. -t: не печатать временную метку в каждой строке вывода. -v: более подробный вывод. Степень подробности можно увеличить с помощью аргументов -vv и даже -vvv. -w имя_файла: записать необработанные пакеты в определенный файл.
Выражения
Утилита tcpdump поддерживает также использование выражений командной строки для создания правил фильтрации, что позволяет получать именно тот трафик, который нужно, и пропускать «неинтересные» пакеты. Выражения состоят из ряда примитивов и иногда модификаторов. Ниже перечислены некоторые наиболее часто используемые примитивы и модификаторы.
Примитивы
dst foo: указать адрес или имя хоста, чтобы захватывать пакеты только для входящего трафика определенного хоста. host foo: указать адрес или имя хоста, чтобы захватывать пакеты только для входящего и исходящего трафика определенного хоста. net foo: указать сеть или фрагмент сети с помощью обозначения CIDR для ограничения захвата пакетов. proto foo: указать протокол, чтобы захватывать пакеты только для трафика, использующего этот протокол. src foo: указать адрес или имя хоста, чтобы захватывать пакеты только для исходящего трафика определенного хоста.
Модификаторы
and: используется для соединения примитивов, чтобы захватывать только пакеты, соответствующие условиям выражений по обе стороны от «and». not: ставится перед примитивом, чтобы захватывать только пакеты, не соответствующие условиям данного выражения. or: используется для соединения примитивов, чтобы захватывать только пакеты, соответствующие условиям одного или нескольких выражений по обе стороны от «or».