• Категории
  • Подписка
  • Разместить статью
05/03/10 15 5261 Сетевые анализаторы
-

Использование утилиты Tcpdump

tcpdump_securos.org.uaУтилита tcpdump  предназначена для отображения заданной информации из заголовков пакетов. С этой целью утилита переводит сетевую плату в беспорядочный режим и перехватывает все проходящие через нее пакеты без учета их пункта назначения.

Утилита располагает средствами фильтрации, позволяющими пользователю сосре­доточиться только на пакетах, представляющих интерес для него. В частности, можно перехватывать пакеты определенных протоколов: ARP, RARP, TCP, ICMP, UDP и др. Существует также возможность сохранять пакеты в файле для дальнейшего анализа и за­гружать их из файла (включая файлы других анализаторов пакетов). Разумеется, для выполнения всех этих действий нужно иметь привилегии суперпользователя.

По окончании обработки пакетов утилита сообщает значения двух счетчиков. Первый из них — это число пакетов, прошедших через фильтр и обработанных утилитой. Второй — число пакетов, удаленных ядром из-за нехватки свободного места в буфере.

В состав Red Hat входит утилита tcpdump версии 3.6.2-9. Недавно появилась версия 4.0.0, которую можно загрузить с Web-узла www.tcpdump.org. Утилита поддержива­ет большое число опций, хотя и без всяких опций она перехватывает огромный объем информации. Синтаксис вызова утилиты таков:

# tcpdump [-adeflnNOpqRStuvxX] [-с  счетчик]   [-F файл]

[-i интерфейс]   [-т модуль]   [-г файл]   [-s длина]

[-Т тип]   [-U пользователь] [-W файл]
[-Е  алгоритм:ключ]   [выражение]


Всевозможные опции и флаги утилиты описаны далее. Аргумент выражение задает правило фильтрации пакетов и состоит из одного или нескольких примитивов сравнения. Каждый примитив — это идентификатор (имя или число) с предшествующим квалификатором (одним или несколькими). Существуют три вида квалификаторов, опре­деляющих тип, направление и протокол пакета. Квалификаторы типа указывают, к како­му виду объектов относится идентификатор: к узлу, сети или протоколу (например, host nanoo или net  192 .168 .1). Квалификатор направления указывает, относится л тификатор к адресу отправителя и/или получателя. Поддерживаются квалификато{ dst, src or dst и src and dst. Квалификаторы протокола задают конкретн: токол. Возможные значения таковы: ether, f ddi, tr, ip, ipv6, arp, rarp, d tcp и udp. Всего утилита распознает более тридцати возможных комбинаций ki каторов. Полный их список приведен на man-странице утилиты. С помощью one and (&&), or (| |) и not (!) можно создавать более сложные правила фильтрации.

Преобразовывать сетевые и широковещательные адреса в доменные имена.

-с  счетчик

Завершить работу после получения указанного числа пакетов.

-d

Записать в стандартный выходной поток скомпилированный код сравнения пакетов в текстовом виде и завершить работу.

-dd

Записать в стандартный выходной поток код сравнения пакетов в виде фрагмента программы на языке С.

-ddd

Записать в стандартный выходной поток код сравнения пакетов в виде десятичных чисел.

Отображать в каждой выводимой строке заголовок канального уровня.

-Е  алгоритм: ключ

Использовать заданные алгоритм и ключ для дешифровки ESP-пакетов протокола IPSec. Возможные варианты алгоритмов таковы: des-cbc, 3des-cbc, blowfish-cbc, гсЗ-cbc, castl28-cbc и none.

-f

Отображать «внешние» Internet-адреса в числовом, а не символическом виде.

-F файл

Загрузить правило фильтрации из указанного файла. Выражение, заданное в командной строке будет игнорироваться.

-i интерфейс

Задает интерфейс для прослушивания. По умолчанию выбирается функционирующий интерфейс с самым низким номером (исключая интерфейс обратной связи); обычно это eth0.

l

Буферизовать строки, записываемые в стандартный выходной поток. Это удобно, если нужно видеть данные в процессе перехвата. Воспользуйтесь, например, командой tcpdump -l | tee dat.

m модуль

Загрузить определения модуля SMI MIB из указанного файла.

n

Не преобразовывать адреса узлов в имена.

nn

Не преобразовывать номера протоколов или портов в имена.

-N

Не добавлять доменное расширение к именам узлов.

O

Не запускать оптимизатор кода сравнения пакетов.

p

Не переводить интерфейс в беспорядочный режим.

q

Отображать минимум информации о протоколах.

r файл

Загрузить пакеты из указанного файла.

R

Предполагать, что пакеты ESP/АН основаны на старых спецификациях.

s длина

Читать из каждого пакета указанное число байтов данных (по умолчанию – 68).

-S

Отображать абсолютные, а не относительные порядковые номера ТСР-пакетов.

-t

Не отображать метку времени в каждой строке.

tt

Отображать неформатированную метку времени в каждой строке.

тип

Принудительно интерпретировать отбираемые пакеты как пакеты заданного типа. Поддерживаются типы cnfp, rpc, rtp, rtcp, snmp и wb.

-U пользователь

Отказаться от привилегий суперпользователя, поменяв значения UID и GID на идентификаторы заданного пользователя.

u

Отображать недекодированные дескрипторы NFS.

-v

Вывод более подробной информации, например полей TTL и TOS IP-пакетов.

vv

Вывод еще более подробной информации, например дополнительных полей ответных пакетов NFS.

vvv

Вывод максимально подробной информации.

-w файл

Записывать необработанные пакеты в файл.

Отображать содержимое каждого пакета (без заголовка канального уровня) в шестнадцатеричном виде.

-X

Отображать   пакеты   не   только   в   шестнадцатеричном   виде,   но и в ASCII-формате.

Будучи вызванной без аргументов, утилита tcpdump прослушивает стандартный ин­терфейс (обычно ethO) и предполагает, что нужно перехватывать любые пакеты, адрес отправителя или получателя которых соответствует адресу текущего узла. В листинге 17.5 показаны результаты работы утилиты для такого случая. Здесь сообщается обо всех па­кетах, адресованных узлу mareen или отправляемых с него. Это, в частности, пакеты протоколов ARP, Telnet и FTP. Чтобы остановить работу утилиты, нажмите <Ctrl+C>.

Пример анализа FTP-Сеанса

Особенностью FTP-Сеанса является использование двух видов соединений между клиентом и сервером.

1) соединение, через которое выполняется идентификация и аутентификация клиента, а также передача команд FTP-Серверу (виртуальный канал управления). Это соединение инициируется клиентом и осуществляется через TCP-Порт 21 (порт ftp) на серверной стороне. Закрывается оно лишь при завершении FTP-Сеанса.

2) соединения, с помощью которых осуществляется передача данных, предусмотренная при выполнении той или иной команды сервером (например, передаются файлы, если выполняются команды передачи файлов, или листинг каталога, если выполняется команда dir). Эти соединения инициируются сервером через TCP-Порт 20 (порт ftp-data) на его стороне каждый раз, когда выполняется соответствующая команда, и закрываются после выполнения этой команды (когда переданы все данные, которые нужно передать при выполнении этой команды).

Рассмотрим пример FTP-Сеанса, зарегистрированного с помощью утилиты tcpdump.

FTP-Клиент выполняется на узле 192.168.0.10, FTP-Сервер — на узле 192.168.0.155.

Клиент, используя один из TCP-Портов в верхнем диапазоне номеров (в данном случае, порт 1406), инициирует TCP-Соединение с сервером (с TCP-Портом 21 узла, на котором выполняется сервер):

17:35:57.032475 192.168.0.10.1406 > 192.168.0.155.21: S 102755:102755(0) win 8192 <mss 1460> (DF)

Как видно из приведенной строки протокола регистрации, начальное значение поля ‘Sequence Number’, згенерованно клиентским узлом, = 102755.

Сервер подтверждает прием запроса на установление соединения (прием начального значения ‘Sequence Number’, переданного клиентом) и передает клиенту свое начальное значение поля ‘Sequence Number’ (которое равняется 3771347893):

17:35:57.032585 192.168.0.155.21 > 192.168.0.10.1406: S 3771347893:3771347893(0) ack 102756 win 5840 <mss 1460> (DF)

Клиент подтверждает прием начального значения ‘Sequence Number’ от сервера:

17:35:57.032934 192.168.0.10.1406 > 192.168.0.155.21: . ack 3771347894 win 8760 (DF)

Теперь соединение установлено.

Дальше сервер передает клиенту приглашения (маркер), после чего начинается процедура идентификации и аутентификации пользователя. При этом клиент и сервер обмениваются пакетами двух типов: PUSH/ACK и ACK. TCP-Флажок PUSH указывает на наличие в пакете данных. Каждый из пакетов имеет TCP-Флажок ACK, поскольку с каждым переданным после установления соединения пакетом, стороны TCP-Соединения сообщают друг другу о количестве принятых байтов информации.

Следующие две строки отвечают передаче сервером приглашения клиенту и подтверждение приема приглашения клиентом:

17:35:57.069911 192.168.0.155.21 > 192.168.0.10.1406: P 3771347894:3771347955(61) ack 102756 win 5840 (DF)

17:35:57.236620 192.168.0.10.1406 > 192.168.0.155.21: . ack 3771347955 win 8699 (DF)

Дальше клиент передает серверу имя пользователя, а сервер клиенту — запрос пароля:

17:36:01.132126 192.168.0.10.1406 > 192.168.0.155.21: P 102756:102770(14) ack 3771347955 win 8699 (DF)

17:36:01.132276 192.168.0.155.21 > 192.168.0.10.1406: . ack 102770 win 5840 (DF)

17:36:01.133733 192.168.0.155.21 > 192.168.0.10.1406: P 3771347955:3771347991(36) ack 102770 win 5840 (DF)

17:36:01.242070 192.168.0.10.1406 > 192.168.0.155.21: . ack 3771347991 win 8663 (DF)

Следующие строки иллюстрируют передачу клиентом серверу пароля, а сервером клиенту — сообщение об успешной аутентификации пользователя:

17:36:08.748471 192.168.0.10.1406 > 192.168.0.155.21: P 102770:102788(18) ack 3771347991 win 8663 (DF)

17:36:08.759215 192.168.0.155.21 > 192.168.0.10.1406: P 3771347991:3771348048(57) ack 102788 win 5840 (DF)

17:36:08.952566 192.168.0.10.1406 > 192.168.0.155.21: . ack 3771348048 win 8606 (DF)

Дальше начинается собственно работа клиента с сервером. В данном случае клиент передает серверу одну команду (это команда dir), выполняя которую, сервер инициирует дополнительное TCP-Соединение с клиентом, через которое передает ему соответствующие данные. Прежде, чем открыть новое соединение, сервер через канал управления спрашивает у клиента номер порта, через который может с ним связаться (в данном случае — это порт 1407). О результате выполнения команды, сервер сообщает клиенту через канал управления:

17:36:12.978438 192.168.0.10.1406 > 192.168.0.155.21: P 102788:102813(25) ack 3771348048 win 8606 (DF)

17:36:12.978702 192.168.0.155.21 > 192.168.0.10.1406: P 3771348048:3771348078(30) ack 102813 win 5840 (DF)

17:36:12.985788 192.168.0.10.1406 > 192.168.0.155.21: P 102813:102819(6) ack 3771348078 win 8576 (DF)

17:36:12.986082 192.168.0.155.20 > 192.168.0.10.1407: S 3776050582:3776050582(0) win 5840 <mss 1460,sackOK,timestamp 2719589 0,nop,wscale 0> (DF)

17:36:12.986525 192.168.0.10.1407 > 192.168.0.155.20: S 102765:102765(0) ack 3776050583 win 8760 <mss 1460> (DF)

17:36:12.986561 192.168.0.155.20 > 192.168.0.10.1407: . ack 102766 win 5840 (DF)

17:36:12.986787 192.168.0.155.21 > 192.168.0.10.1406: P 3771348078:3771348141(63) ack 102819 win 5840 (DF)

17:36:12.987478 192.168.0.155.20 > 192.168.0.10.1407: P 3776050583:3776050660(77) ack 102766 win 5840 (DF)

На данном этапе выполнения – команды закончены. Сервер разрывает установленное дополнительное соединение, передавая клиенту пакет с установленным TCP-Флажком FIN (на что клиент отвечает тем же):

17:36:12.987629 192.168.0.155.20 > 192.168.0.10.1407: F 3776050660:3776050660(0) ack 102766 win 5840 (DF)

17:36:12.987967 192.168.0.10.1407 > 192.168.0.155.20: . ack 3776050661 win 8683 (DF)

17:36:13.003839 192.168.0.10.1407 > 192.168.0.155.20: F 102766:102766(0) ack 3776050661 win 8683 (DF)

17:36:13.003879 192.168.0.155.20 > 192.168.0.10.1407: . ack 102767 win 5840 (DF)

Завершающий обмен данными, связанными с выполнением команды:

17:36:13.158276 192.168.0.10.1406 > 192.168.0.155.21: . ack 3771348141 win 8513 (DF)

17:36:13.158341 192.168.0.155.21 > 192.168.0.10.1406: P 3771348141:3771348165(24) ack 102819 win 5840 (DF)

17:36:13.358542 192.168.0.10.1406 > 192.168.0.155.21: . ack 3771348165 win 8489 (DF)

В конце концов, клиент передает серверу последнюю команду (quit), после чего сервер инициирует завершение соединения:

17:36:16.092947 192.168.0.10.1406 > 192.168.0.155.21: P 102819:102825(6) ack 3771348165 win 8489 (DF)

17:36:16.093154 192.168.0.155.21 > 192.168.0.10.1406: P 3771348165:3771348211(46) ack 102825 win 5840 (DF)

17:36:16.097741 192.168.0.155.21 > 192.168.0.10.1406: FP 3771348211:3771348353(142) ack 102825 win 5840 (DF)

17:36:16.098260 192.168.0.10.1406 > 192.168.0.155.21: . ack 3771348354 win 8301 (DF)

17:36:16.134016 192.168.0.10.1406 > 192.168.0.155.21: F 102825:102825(0) ack 3771348354 win 8301 (DF)

17:36:16.134070 192.168.0.155.21 > 192.168.0.10.1406: . ack 102826 win 5840 (DF)

Рассмотрим ряд более сложных примеров (результаты работы утилиты приводить не будем, так как это не принципиально). Вот как можно отобразить все пакеты, передавае­мые между двумя узлами (папоо и bria):

# tcpdump host nanoo and bria

Если нужно отобразить все IP-пакеты, передаваемые между узлом gabo и остальными узлами (кроме узла gene), введите такую команду:

# tcpdump ip host gabo and not gene

Следующая команда перехватывает весь FTP-трафик, проходящий через шлюз gwrouter (обратите внимание на одинарные кавычки, защищающие скобки от интер­претации):

# tcpdump  ‘gateway gwrouter and  (port ftp or  ftp-data)’

Утилита tcpdump — чрезвычайно мощный анализатор пакетов. Она работает на самом низком уровне, на котором это возможно, и является основой для ряда других анализаторов, например Ethereal. Более подробная информация о примитивах сравнения и примеры использования различных опций приведены на man-странице утилиты.

Короткая справка относительно некоторых опций TCP-Заголовков

Maximum Segment Size (MSS). Определяет максимальный размер IP-Датаграм, которыми стороны TCP-Соединения могут обмениваться без применения фрагментации. Эта опция может присутствовать в TCP-Заголовках только во время установления соединения (обмена сообщениями типа SYN и SYN/ACK). Если одна из сторон соединения или обе проигнорируют эту опцию, принимается значение 536 байт (см. RFC 793, RFC 1122).

No Operation (NOP). Не переносит никакой информации. Используется для выравнивания размера TCP-Заголовка и размещение опций в нем (см. RFC 793).

Selective Acknowledgment Permitted (SackOK). Сообщает сторону TCP-Соединения о допустимости селективного подтверждения приема. В этом режиме сторона TCP-Соединения имеет возможность подтверждать прием пакетов, даже если не приняты некоторые из тех, что отправлены раньше (для передачи информации подтверждения в этом случае применяется опция Selective Acknowledgment Data). Эта опция может присутствовать в TCP-Заголовках только во время установления соединения (причем она должна быть как в сообщении типа SYN, так и в сообщении типа SYN/ACK) (см. RFC 2018).

Timestamp. Предназначенная для измерения времени передачи пакетов между сторонами TCP-Соединения. Содержит два поля, в одно из которых записывается время отправки пакета, а во второе – время отправки пакета, прием которого подтверждается данным (см. RFC 1323).

Window Scale (WSCALE). Определяет масштабный коэффициент для поля TCP-Заголовка ‘Window Size’.  Может быть в TCP-Заголовках только во время установления соединения (обмена сообщениями типа SYN и SYN/ACK) (см. RFC 1323).


15 комментариев на «“Использование утилиты Tcpdump”»

  1. Тяжеловатая прога. В свое время не один день потратил на её освоение! Сейчас же, все летает. Спасибо!

  2. Сложновато, что-то для быстрого усвоения, нужно пробовать…

  3. Спасибо за подробное описание! Сам бы точно не разобрался!

  4. pupkin2:

    carerakjan ну уж и не такая большая проблема.
    когда приперает во много раз хуже вещи решаешь )

Добавить комментарий

Яндекс.Метрика