Эффективное программирование TCP-IP

       

Использование tcpdump


Прежде всего для использования tcpdump надо получить разрешение. Поскольку применение сетевых анализаторов небезопасно, по умолчанию tcpdump конфигурируется с полномочиями суперпользователя root.

Примечание: К системе Windows это не относится. Коль скоро NDIS-драйвер для перехвата пакетов установлен, воспользоваться программой WinDump может любой.

Во многих случаях лучше дать возможность всем пользователям работать с программой tcpdump, не передавая им полномочия суперпользователя. Это делается по-разному, в зависимости от версии UNIX и документировано в руководстве по tcpdump. В большинстве случаев надо либо предоставить всем права на чтение из сетевого интерфейса, либо сделать tcpdump setuid-программой.

Проще всего вызвать tcpdump вообще без параметров. Тогда она будет перехватывать все сетевые пакеты и выводить о них информацию. Однако полезнее, указать какой-нибудь фильтр, чтобы видеть только нужные пакеты и не отвлекаться на остальные. Например, если требуются лишь пакеты, полученные от хоста bsd или отправленные ему, то можно вызвать tcpdump так:

tcpdump host bsd

Если же нужны пакеты, которыми обмениваются хосты bsd и sparc, то можно использовать такой фильтр:

host bsd and host spare

или сокращенно -

host bsd and spare

Язык для задания фильтров достаточно богат и позволяет фильтровать, например, по следующим атрибутам:

  • протокол;
  • хост отправления и/или назначения;
  • сеть отправления и/или назначения;
  • Ethernet-адрес отправления и/или назначения;
  • порт отправления и/или назначения;
  • размер пакета;
  • пакеты, вещаемые на всю локальную сеть или на группу (как в Ethernet так, и в IP);
  • пакет, используемый в качестве шлюза указанным хостом.
  • Кроме того, можно проверять конкретные биты или байты в заголовках протоколов. Например, чтобы отбирать только TCP-сегменты, в которых выставлен бит срочных данных, следует использовать фильтр

    tcp[ 13 ] & 16

    Чтобы понять последний пример, надо знать, что четвертый бит четырнадцатого байта заголовка TCP - это бит срочности.

    Поскольку разрешается использовать булевские операторы and (или &&), or (или ) и not (или !) для комбинирования простых предикатов, можно задавать фильтры произвольной сложности. Ниже приведен пример фильтра, отбирающего ICMP-пакеты, приходящие из внешней сети:

    icmp and not  src net  localnet

    Примеры более сложных фильтров рассматриваются в документации по tcpdump.



    Содержание раздела