Сетевые средства Linux

Анализ сетевого трафика как метод диагностики сети

Разбить на страницы
Показывать лекцию целиком

Содержание

  • "Прослушивание" сетевого трафика
  • Утилита tcpdump
  • Анализ трафика на уровне сетевых интерфейсов и сетевом уровне с помощью tcpdump
  • Анализ трафика на транспортном уровне с помощью tcpdump
  • "Прослушивание" сетевого трафика

    В некоторых случаях для обнаружения проблем функционирования сетевого стека узла и сегментов сети используется анализ сетевого трафика. Существуют средства, которые позволяют отобразить (прослушать) и проанализировать работу сети на уровне передаваемых фреймов, сетевых пакетов, сетевых соединений, датаграмм и прикладных протоколов.

    В зависимости от ситуации для диагностики может быть доступен как трафик узла, на котором производится прослушивание сетевого трафика, так и трафик сетевого сегмента, порта маршрутизатора и т. д. Расширенные возможности для перехвата трафика основаны на "беспорядочном" (promiscuous) режиме работы сетевого адаптера: обрабатываются все фреймы (а не только те, которые предназначены данному MAC-адресу и широковещательные, как в нормальном режиме функционирования).

    В сети Ethernet существуют следующие основные возможности прослушивания трафика:

  • В сети на основе концентраторов весь трафик домена коллизий доступен любой сетевой станции.
  • В сетях на основе коммутаторов сетевой станции доступен ее трафик, а также весь широковещательный трафик данного сегмента.
  • Некоторые управляемые коммутаторы имеют функцию копирования трафика данного порта на порт мониторинга ("зеркалирование",мониторинг порта).
  • Использование специальных средств (ответвителей), включаемых в разрыв сетевого подключения и передающих трафик подключения на отдельный порт.
  • "Трюк" с концентратором — порт коммутатора, трафик которого необходимо прослушать, включают через концентратор, подключив к концентратору также узел-монитор (при этом в большинстве случаев уменьшается производительность сетевого подключения).
  • Существуют программы (сетевые мониторы или анализаторы, sniffer), которые реализуют функцию прослушивания сетевого трафика (в т.ч. в беспорядочном режиме), отображения его или записи в файл. Дополнительно ПО для анализа может фильтровать трафик на основе правил, декодировать (расшифровать) протоколы, считать статистику и диагностировать некоторые проблемы.

    Примечание: Хорошим выбором базового инструмента для анализа сетевого трафика в графической среде является бесплатный пакет , доступный для Windows и в репозиториях некоторых дистрибутивов Linux.

    Утилита tcpdump

    Консольная утилита tcpdump входит в состав большинства Unix-систем и позволяет перехватывать и отображать сетевой трафик . Утилита использует libpcap, переносимую C/C++ библиотеку для перехвата сетевого трафика.

    Для установки tcpdump в Debian можно использовать команду:

    # apt-get install tcpdump

    Для запуска данной утилиты необходимо иметь права суперпользователя (в частности, в связи с необходимостью перевода сетевого адаптера в "беспорядочный" режим). В общем виде формат команды имеет следующий вид:

    tcpdump  <опции>   <фильтр-выражение>

    Для вывода на консоль описание заголовков (расшифрованные данные) перехваченных пакетов необходимо указать интерфейс для анализа трафика (опция -i ):

    # tcpdump -i eth0

    Можно отключить преобразования IP адресов в доменные имена (т.к. при больших объемах трафика создается большое число запросов к DNS-серверу) — опция -n:

    # tcpdump -n -i eth0

    Для вывода данных канального уровня (например, mac адреса и прочее) - опция -e:

    # tcpdump -en -i eth0

    Вывод дополнительной информации (например, TTL, опции IP) — опция -v:

    # tcpdump -ven -i eth0

    Увеличение размера захватываемых пакетов (больше 68 байт по умолчанию) — опция -s с указанием размера ( -s 0 — захватывать пакеты целиком):

    # tcpdump -s 0

    Запись в файл (непосредственно пакеты - "дамп" ) - опция -w с указанием имени файла:

    # tcpdump -w traf.dump

    Чтение пакетов из файла — опция - r с указанием имени файла:

    # tcpdump -r traf.dump

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

    Дополнительную информацию по ключам и формате фильтров tcpdump можно получить в справочном руководстве ( man tcpdump ).

    Анализ трафика на уровне сетевых интерфейсов и сетевом уровне с помощью tcpdump

    Для выделения Ethernet-фреймов используются следующие конструкции tcpdump (общий вид):

    tcpdump ether { src | dst | host } MAC_ADDRESS

    где srcMAC-адрес источника, dstMAC-адрес назначения, hostsrc или dst, а также для выделения широковещательного трафика:

    tcpdump ether  broadcast

    Например:

    # tcpdump -n -i vlan0 ether src 0:2:b3:d8:d8:2c
    # tcpdump -n -e -i vlan0 ether broadcast

    В первом случае выбираются с интерфейса vlan0 фреймы с указанным MAC-адресом источника. Во втором - выбирается широковещательный трафик на интерфейсе vlan0.

    Фильтрация по IP адресам ( net — сеть, для указания маски подсети - mask ):

    tcpdump { src | dst } { net | host }

    Например:

    # tcpdump -n -i eth0 src 192.168.66.1
    # tcpdump -n -i eth0 host 192.168.66.1
    # tcpdump -n -i eth0 src net 10.0.0.0 mask 255.0.0.0

    В первом случае фильтруются сетевые пакеты, в заголовке которых в поле источник указан IP-адрес 192.168.66.1. Во втором случае — пакеты, в которых данный IP-адрес указан как источник или как получатель пакета. В третьем — пакеты, в которых источником указаны узлы сети 10.0.0.0/8.

    Фильтрация по IP протоколу:

    tcpdump { arp | rarp | ip | tcp | udp | icmp }

    Например, выбирать ICMP-пакеты:

    # tcpdump -n -i eth0 icmp

    Сложные фильтры могут содержать множество примитивов, связанных между собой с использованием логических операторов and, or и not.

    Например: host 192.168.12.5 and host 192.168.13.4.

    Анализ работы протокола ARP

    Используем хостовую систему и виртуальную машину с сетевым адаптером, настроенным на виртуальную сеть узла. Установим на сетевом адаптере виртуальной машины IP-адрес из той же подсети, что и на адаптер vboxnet0 (адаптер виртуальной сети узла) основной системы.

    Настройки адаптера vboxnet0 в основной системе:

    # ip addr show dev vboxnet0
    5: vboxnet0:  <BROADCAST,MULTICAST,UP,LOWER_UP>  mtu 1500 qdisc pfifo_fast
        state UNKNOWN qlen 1000
        link/ether 0a:00:27:00:00:00 brd ff:ff:ff:ff:ff:ff
        inet 192.168.56.1/24 brd 192.168.56.255 scope global vboxnet0
        inet6 fe80::800:27ff:fe00:0/64 scope link 
           valid_lft forever preferred_lft forever

    Настройки сетевого адаптера в виртуальной машине:

    # ip addr show dev eth1
    3: eth1:  <BROADCAST,MULTICAST,UP,LOWER_UP>  mtu 1500 qdisc 
        pfifo_fast state UP qlen 1000
        link/ether 08:00:27:fd:e5:aa brd ff:ff:ff:ff:ff:ff
        inet 192.168.56.33/24 scope global eth1
        inet6 fe80::a00:27ff:fefd:e5aa/64 scope link 
           valid_lft forever preferred_lft forever

    Можно проверить командой ip neigh show dev vboxnet0, что в ARP-таблице основной системы нет записей связанных с интерфейсом vboxnet0.

    Откроем еще одну консоль на основной системе и запустим tcpdump:

    # tcpdump -ne -i vboxnet0
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on vboxnet0, link-type EN10MB (Ethernet), capture size 65535 bytes

    Запустим ping виртуальной машины с основной системы:

    # ping -c 1 192.168.56.33 
     PING 192.168.56.33 (192.168.56.33) 56(84) bytes of data. 
     64 bytes from 192.168.56.33: icmp_req=1 ttl=64 time=1.06 ms 
     --- 192.168.56.33 ping statistics --- 
     1 packets transmitted, 1 received, 0% packet loss, time 0ms 
     rtt min/avg/max/mdev = 1.067/1.067/1.067/0.000 ms

    В ARP-таблице основной системы появилась запись об IP-адресе виртуальной машины:

    # ip neigh show dev vboxnet0
    192.168.56.33 lladdr 08:00:27:fd:e5:aa STALE

    Вывод tcpdump:

    # tcpdump -ne -i vboxnet0
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on vboxnet0, link-type EN10MB (Ethernet), capture size 65535 bytes
    12:16:29.465780 0a:00:27:00:00:00 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), 
          length 42: Request who-has 192.168.56.33 tell 192.168.56.1, length 28
    12:16:29.466786 08:00:27:fd:e5:aa > 0a:00:27:00:00:00, ethertype ARP (0x0806), 
          length 42: Reply 192.168.56.33 is-at 08:00:27:fd:e5:aa, length 28
    12:16:29.466815 0a:00:27:00:00:00 > 08:00:27:fd:e5:aa, ethertype IPv4 (0x0800), 
       length 98: 192.168.56.1 > 192.168.56.33: ICMP echo request, id 5284, seq 1, length 64
    12:16:29.467934 08:00:27:fd:e5:aa > 0a:00:27:00:00:00, ethertype IPv4 (0x0800),
       length 98: 192.168.56.33 > 192.168.56.1: ICMP echo reply, id 5284, seq 1, length 64
    ^C
    4 packets captured
    4 packets received by filter
    0 packets dropped by kernel

    Каждая запись о сетевом пакете в таком формате содержит время перехвата пакета, MAC-адреса отправителя и получателя, тип протокола, длину пакета и сведения о содержимом пакета. Первая запись описывает широковещательный ARP-запрос с MAC-адреса интерфейса vboxnet0 основной системы ("У кого адрес 192.168.56.33 ответь 192.168.56.1"). Вторая запись — ответ с MAC-адреса виртуальной машины на MAC-адрес основной системы ("192.168.56.33 имеет определенный MAC-адрес"). Третья и четвертая записи (ICMP-запрос и ICMP-ответ) являются результатом работы команды ping на основной системе.

    Таким образом, основная система для того, чтобы отправить стандартный эхо-запрос виртуальной машине, предварительно по протоколу ARP получила MAC-адреса виртуальной машины и внесла его с привязкой к IP-адресу в свою ARP-таблицу.

    Работа tcpdump была прервана комбинацией клавиш Ctrl+C. Перед завершением работы tcpdump печатает статистику работы: количество перехваченных, полученных фильтром и отброшенных ядром пакетов.

    Анализ трафика на транспортном уровне с помощью tcpdump

    Для фильтрации трафика определенного порта на транспортном уровне можно использовать ключевое слово port. Например:

    # tcpdump -n -i eth0 src port 53
    # tcpdump -n -i eth0 tcp port 80

    В первом случае будут отбираться пакеты, несущие единицы передачи транспортного уровня (TCP или UDP), в которых порт-источник установлен в 53. Во втором случае — пакеты с TCP-сегментами, у которых порт источника или назначения равен 80.

    Обратимся с основной системы к WEB-серверу, установленному на виртуальной машине:

    # lynx 192.168.56.33

    предварительно, запустив tcpdump на другой консоли:

    # tcpdump -n -i vboxnet0 host 192.168.56.33 and port 80
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on vboxnet0, link-type EN10MB (Ethernet), capture size 65535 bytes
    15:44:37.837393 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [S], seq 1209026235, 
          win 5840, options [mss 1460,sackOK,TS val 2934847 ecr 0,nop,wscale 7], length 0
    15:44:37.838118 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [S.], seq 370041518, 
          ack 1209026236, win 5792, options [mss 1460,sackOK,TS val 3275261 ecr 
          2934847,nop,wscale 2], length 0
    15:44:37.838157 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [.], ack 1, 
          win 46, options [nop,nop,TS val 2934847 ecr 3275261], length 0
    15:44:37.839254 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [P.], seq 1:222, 
          ack 1, win 46, options [nop,nop,TS val 2934847 ecr 3275261], length 221
    15:44:37.839921 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [.], ack 222, 
          win 1716, options [nop,nop,TS val 3275262 ecr 2934847], length 0
    15:44:37.848118 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [P.], seq 1:446, 
          ack 222, win 1716, options [nop,nop,TS val 3275264 ecr 2934847], length 445
    15:44:37.848156 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [.], ack 446, 
          win 54, options [nop,nop,TS val 2934848 ecr 3275264], length 0
    15:44:37.849738 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [F.], seq 446, 
          ack 222, win 1716, options [nop,nop,TS val 3275264 ecr 2934848], length 0
    15:44:37.850366 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [F.], seq 222,
          ack 447, win 54, options [nop,nop,TS val 2934848 ecr 3275264], length 0
    15:44:37.851267 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [.], ack 223, win 1716, 
          options [nop,nop,TS val 3275265 ecr 2934848], length 0
    …

    В данном примере клиент (192.168.56.1) c TCP-порта 41533 устанавливает соединение с сервером (192.168.56.33), слушающим на порту 80, делает запрос, получает необходимые данные и соединение завершается.

    Заголовок TCP-сегмента, помимо номеров портов получателя и отправителя содержит ряд параметров :

  • Номер последовательности ( seq ). Определяет порядок следования байт в отправляемом в сеть потоке (смещение первого байта в сегменте относительно начала потока данных).
  • Подтвержденный номер ( ACK ). Максимальный номер байта в полученном сегменте увеличенный на 1. Отправляемые отправителю подтверждения одновременно служат запросом новой порции данных.
  • Управляющие флаги ( SYN - S, ACK, FIN -F , RST — R , PSH - P, URG )
  • Окно ( win ) — количество байтов данных, ожидаемых отправителем данного, начиная с байта номер которого указан в поле ack. Для оптимизации передачи отправитель не ждет подтверждения для каждого отправленного сегмента, а может отправить в сеть группу сегменту (но в байтах не больше размера окна). Если качество канала плохое (много запросов на повторную передачу, теряются подтверждения) окно уменьшается, если хорошее — окно увеличивается.
  • Опции. Используются для решения вспомогательных задач. Например, передается MSS (Maximum segment size) — максимальный размер сегмента.
  • Процесс установления двунаправленного соединения по протоколу TCP отражают первые три записи tcpdump:

  • Клиент отправляет серверу TCP-сегмент с установленым флагом SYN, начальным "случайным" номером ( 1209026235 ), с которого будут нумероваться байты в отправляемом им потоке, максимальный размер окна — объем, который разрешено передавать серверу без подтверждения от клиента (5840):
    15:44:37.837393 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [S], seq 1209026235, 
       win 5840, options [mss 1460,sackOK,TS val 2934847 ecr 0,nop,wscale 7], length
  • Сервер отправляет клиенту TCP-сегмент с установленными флагами SYN и ACK, начальным "случайным" номером ( 370041518 ), с которого будут нумероваться байты в отправляемом им потоке, и максимальный размер окна для клиента (5792). Данный сегмент также является подтверждением получения запроса на установление соединения от клиента:
    15:44:37.838118 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [S.], seq 370041518, 
       ack 1209026236, win 5792, options [mss 1460,sackOK,TS val 3275261 ecr 2934847,nop,wscale 2], length
  • Клиент отправляет серверу TCP-сегмент с установленным флагом ACK, который является подтверждением получения сегмента от сервера (далее tcpdump отображает относительные значения seq и ask ):
    15:44:37.838157 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [.], ack 1, win 46,
       options [nop,nop,TS val 2934847 ecr 3275261], length
  • После этого соединение считается установленным.

    В следующей паре записей клиент передает в секции данных сегмента серверу запрос протокола прикладного уровня (221 байт) и получает от сервера подтверждение его получения:

    15:44:37.839254 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [P.], seq 1:222, 
       ack 1, win 46, options [nop,nop,TS val 2934847 ecr 3275261], length 221
    15:44:37.839921 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [.], ack 222, win 1716, 
       options [nop,nop,TS val 3275262 ecr 2934847], length 0

    При этом флаг PSH (P) используется для оповещения отправляющей стороны о том, что принимающая готова принимать данные.

    Далее сервер отправляет данные клиенту (445 байт) и получает от него подтверждение получения:

    15:44:37.848118 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [P.], seq 1:446, 
       ack 222, win 1716, options [nop,nop,TS val 3275264 ecr 2934847], length 445
    15:44:37.848156 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [.], ack 446, 
       win 54, options [nop,nop,TS val 2934848 ecr 3275264], length 0

    Затем по инициативе сервера соединение завершается. Сервер шлет сегмент с установленным флагом FIN:

    15:44:37.849738 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [F.], seq 446,
       ack 222, win 1716, options [nop,nop,TS val 3275264 ecr 2934848], length 0

    Клиент в ответ также отправляет сегмент с установленным флагом FIN ; данный сегмент одновременно является подтверждением получения запроса на завершение соединения от сервера:

    15:44:37.850366 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [F.], seq 222, 
       ack 447, win 54, options [nop,nop,TS val 2934848 ecr 3275264], length 0

    Серверу остается лишь подтвердить получение FIN-сегмента от клиента.

    15:44:37.851267 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [.], ack 223,
       win 1716, options [nop,nop,TS val 3275265 ecr 2934848], length 0
    21:56:14.381091 IP 192.168.56.1.54040 > 192.168.56.33.23: Flags [S], seq 2956835311,
       win 5840, options [mss 1460,sackOK,TS val 5164501 ecr 0,nop,wscale 7], length 0
    21:56:14.381688 IP 192.168.56.33.23 > 192.168.56.1.54040: Flags [R.],
       seq 0, ack 2956835312, win 0, length 0

    В данном примере с системы 192.168.56.1 делается попытка подключится к несуществующему TCP-сервису на узле 192.168.56.33. Удаленная система реагирует отправкой сегмента с установленным флагом RST (сброса соединения).

    21:55:16.925906 IP 192.168.56.1.41979 > 192.168.56.33.53: 6561+ A? www.tut.by. (28)
    21:55:16.926615 IP 192.168.56.33 > 192.168.56.1: ICMP 192.168.56.33 udp port 53 unreachable, length 64

    В данном примере сделана попытка отправить UDP-датаграмму на несуществующий порт удаленной системы. Протокол UDP обычно реагирует отправкой ICMP-сообщения исходному узлу о недостижимости порта.

    Ключевые термины

    Беспорядочный (promiscuous) режим — режим работы сетевого адаптера, при котором принимаются все фреймы, а не те, которые предназначены данному узлу, как в обычном состоянии.

    Сетевой монитор или анализатор (sniffer) — средство для перехвата и анализа сетевого трафика.

    Краткие итоги

  • Для анализа трафика узла (а также для анализа трафика сетевого сегмента) можно использовать специальные средства — сетевые анализаторы или мониторы.
  • В Unix-подобных ОС утилита tcpdump позволяет выполнять базовые операции по перехвату сетевого трафика, декодирования протоколов, записи и чтения сетевого трафика в файл, фильтрации трафика для анализа и т. д.
  • Для анализа трафика в графическом режиме пользователя можно использовать пакет wireshark.
  • Упражнения

    1.В среде VirtualBox запустите виртуальную машину (ВМ) с установленным Debian GNU\Linux и установленным HTTP-сервером с одной сетевой картой, предварительно установив тип сетевого подключения "Виртуальная сеть узла" .

    Изучите процесс взаимодействия между HTTP-сервером, установленным на ВМ, и клиентом на основной системе:

    1.1.Запустите на консоле ВМ утилиту tcpdump c параметрами -nve.

    1.2.В основной системе запустите командный интерпретатор и используя утилиту telnet установите TCP соединение с HTTP-сервером, слушающим на 80 порту ВМ:

    # telnet  <IP-адрес ВМ>  80

    Затем отправьте ВМ запрос корневой страницы, закончив ввод двойным нажатием клавиши enter:

    GET / HTTP/1.1    
    Host: <IP-адрес ВМ>

    Сервер должен выдать ответ с кодом 200 (HTTP/1.1 200 OK)

    1.3.Переключитесь в ВМ и, используя результаты работы tcpdump, последовательно изучите ход сетевого соединения.

    2.Для данного упражнения необходимо, чтобы в виртуальной машине с установленным Debian GNU\Linux были установлены HTTP и SSH-сервера. Сетевая карта виртуальной машины должна быть подключена к виртуальной сети узла VirtualBox.

    2.1.Запустите на консоли виртуальной машины tcpdump таким образом, чтобы перехваченные пакеты в низкоуровневом формате записывались в файл (дамп трафика). Далее:

  • Проверьте доступность виртуальной машины с основной с помощью ping.
  • Проверьте доступность основной системы с виртуальной с помощью ping.
  • Запустите Интернет-обозреватель в основной системе и запросите страницу с HTTP-сервера виртуальной машины.
  • Затем, используя клиент ssh (для Windows можно использовать putty или winscp ), подключитесь с основной системы к виртуальной машине и отключитесь).
  • Используя утилиту telnet, попробуйте подключиться с основной системы к виртуальной машине на порт 8080.
  • Попробуйте с виртуальной машины сделать DNS-запрос на разрешение имени http://www.yandex.ru, используя утилиту nslookup (apt-get install dnsutils).
  • Удалите из ARP-таблицы виртуальной машины запись о MAC-адресе основной системы, а затем проверьте доступность основной системы с помощью ping.
  • Затем прервите работу tcpdump комбинацией клавиш Ctrl+C.

    2.2.Сконструируйте правила tcpdump, которые бы из полученного файла дампа отображали:

    2.2.1.Все ICMP-пакеты

    2.2.2.ICMP-пакеты, отправленные основной системой

    2.2.3.Взаимодействие по протоколу TCP между основной системой и виртуальной машиной.

    2.2.4.Взаимодействие между HTTP-клиентом и HTTP-сервером.

    2.2.5.Взаимодействие между основной системой и TCP-портом 8080 виртуальной машины. Было ли это взаимодействие удачным?

    2.2.6.Отобразите весь UDP-трафик, который присутствует в файле дампа.

    2.2.7.Отобразите широковещательный трафик (с информацией уровня доступа к сети), который находится в файле дампа.

    2.2.8.Отобразите ARP-трафик, который содержится в дампе (с информацией уровня доступа к сети).

    3. В локальном сегменте сети (подсеть 192.168.6.0/24) сетевые станции не могут взаимодействовать друг с другом по протоколу IP. Изучить фрагмент вывода tcpdump и объяснить причину данной ситуации:

    $ tcpdump -ne -r ex3.dump 
    reading from file ex3.dump, link-type EN10MB (Ethernet)
    16:20:38.558302 00:00:00:00:00:01 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806),
       length 42: Request who-has 192.168.6.30 tell 192.168.6.5, length 28
    16:20:38.580672 00:00:00:00:00:03 > 00:00:00:00:00:01, ethertype ARP (0x0806),
       length 42: Reply 192.168.6.30 is-at 00:00:00:00:00:03, length 28
    16:20:38.639393 00:00:00:00:00:01 > 00:00:00:00:00:03, ethertype IPv4 (0x0800),
       length 42: 192.168.6.5 > 192.168.6.30: ICMP echo request, id 33887, seq 13729, length 8
    16:20:38.654419 00:00:00:00:00:02 > 00:00:00:00:00:01, ethertype ARP (0x0806),
       length 42: Reply 192.168.6.30 is-at 00:00:00:00:00:02, length 28
    16:20:38.683649 00:00:00:00:00:01 > 00:00:00:00:00:03, ethertype IPv4 (0x0800),
       length 42: 192.168.6.5 > 192.168.6.30: ICMP echo request, id 5362, seq 61839, length 8
    16:20:38.709642 00:00:00:00:00:04 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806),
       length 42: Request who-has 192.168.6.10 tell 192.168.6.4, length 28
    16:20:38.729719 00:00:00:00:00:05 > 00:00:00:00:00:04, ethertype ARP (0x0806),
       length 42: Reply 192.168.6.10 is-at 00:00:00:00:00:05, length 28
    16:20:38.748087 00:00:00:00:00:01 > 00:00:00:00:00:03, ethertype IPv4 (0x0800),
       length 42: 192.168.6.5 > 192.168.6.30: ICMP echo request, id 4309, seq 56734, length 8
    16:20:38.770256 00:00:00:00:00:03 > 00:00:00:00:00:04, ethertype ARP (0x0806),
       length 42: Reply 192.168.6.10 is-at 00:00:00:00:00:03, length 28
    16:20:38.803840 00:00:00:00:00:01 > 00:00:00:00:00:03, ethertype IPv4 (0x0800),
       length 42: 192.168.6.5 > 192.168.6.30: ICMP echo request, id 46657, seq 6367, length 8
    16:20:38.829548 00:00:00:00:00:04 > 00:00:00:00:00:05, ethertype IPv4 (0x0800),
       length 42: 192.168.6.4 > 192.168.6.10: ICMP echo request, id 6239, seq 43338, length 8
    16:20:38.861968 00:00:00:00:00:05 > 00:00:00:00:00:04, ethertype IPv4 (0x0800),
       length 42: 192.168.6.10 > 192.168.6.4: ICMP echo reply, id 0, seq 0, length 8
    16:20:38.885832 00:00:00:00:00:06 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806),
       length 42: Request who-has 192.168.6.20 tell 192.168.6.21, length 28
    16:20:38.914436 00:00:00:00:00:03 > 00:00:00:00:00:06, ethertype ARP (0x0806),
       length 42: Reply 192.168.6.20 is-at 00:00:00:00:00:03, length 28
    16:20:38.953113 00:00:00:00:00:04 > 00:00:00:00:00:05, ethertype IPv4 (0x0800),
       length 42: 192.168.6.4 > 192.168.6.10: ICMP echo request, id 41141, seq 12273, length 8
    16:20:38.978185 00:00:00:00:00:10 > 00:00:00:00:00:06, ethertype ARP (0x0806),
       length 42: Reply 192.168.6.20 is-at 00:00:00:00:00:10, length 28
    16:20:39.018692 00:00:00:00:00:01 > 00:00:00:00:00:03, ethertype IPv4 (0x0800),
       length 42: 192.168.6.5 > 192.168.6.30: ICMP echo request, id 15440, seq 26713, length 8
    16:20:39.037768 00:00:00:00:00:05 > 00:00:00:00:00:04, ethertype IPv4 (0x0800),
       length 42: 192.168.6.10 > 192.168.6.4: ICMP echo reply, id 0, seq 0, length 8
    16:20:39.073481 00:00:00:00:00:01 > 00:00:00:00:00:03, ethertype IPv4 (0x0800),
       length 42: 192.168.6.5 > 192.168.6.30: ICMP echo request, id 1117, seq 65455, length 8
    16:20:39.197000 00:00:00:00:00:06 > 00:00:00:00:00:03, ethertype IPv4 (0x0800),
       length 70: 192.168.6.21.21519 > 192.168.6.20.53: 28042 A? www.tut.by. (28)
    16:20:39.252522 00:00:00:00:00:1a > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806),
       length 42: Request who-has 192.168.6.20 tell 192.168.6.100, length 28
    16:20:39.270199 00:00:00:00:00:03 > 00:00:00:00:00:1a, ethertype ARP (0x0806),
       length 42: Reply 192.168.6.20 is-at 00:00:00:00:00:03, length 28
    16:20:39.293142 00:00:00:00:00:10 > 00:00:00:00:00:1a, ethertype ARP (0x0806),
       length 42: Reply 192.168.6.20 is-at 00:00:00:00:00:10, length 28
    16:20:39.408039 00:00:00:00:00:1a > 00:00:00:00:00:03, ethertype IPv4 (0x0800),
       length 72: 192.168.6.100.21455 > 192.168.6.20.53: 29961 A? www.aport.ru. (30)
    16:20:39.546045 00:00:00:00:00:06 > 00:00:00:00:00:03, ethertype IPv4 (0x0800),
       length 70: 192.168.6.21.55962 > 192.168.6.20.53: 64123 A? www.tut.by. (28)
    16:20:39.685004 00:00:00:00:00:1a > 00:00:00:00:00:03, ethertype IPv4 (0x0800),
       length 72: 192.168.6.100.30522 > 192.168.6.20.53: 41887 A? www.aport.ru. (30)
    Страницы:

    Содержание

  • "Прослушивание" сетевого трафика
  • Утилита tcpdump
  • Анализ трафика на уровне сетевых интерфейсов и сетевом уровне с помощью tcpdump
  • Анализ трафика на транспортном уровне с помощью tcpdump
  • "Прослушивание" сетевого трафика

    В некоторых случаях для обнаружения проблем функционирования сетевого стека узла и сегментов сети используется анализ сетевого трафика. Существуют средства, которые позволяют отобразить (прослушать) и проанализировать работу сети на уровне передаваемых фреймов, сетевых пакетов, сетевых соединений, датаграмм и прикладных протоколов.

    В зависимости от ситуации для диагностики может быть доступен как трафик узла, на котором производится прослушивание сетевого трафика, так и трафик сетевого сегмента, порта маршрутизатора и т. д. Расширенные возможности для перехвата трафика основаны на "беспорядочном" (promiscuous) режиме работы сетевого адаптера: обрабатываются все фреймы (а не только те, которые предназначены данному MAC-адресу и широковещательные, как в нормальном режиме функционирования).

    В сети Ethernet существуют следующие основные возможности прослушивания трафика:

  • В сети на основе концентраторов весь трафик домена коллизий доступен любой сетевой станции.
  • В сетях на основе коммутаторов сетевой станции доступен ее трафик, а также весь широковещательный трафик данного сегмента.
  • Некоторые управляемые коммутаторы имеют функцию копирования трафика данного порта на порт мониторинга ("зеркалирование",мониторинг порта).
  • Использование специальных средств (ответвителей), включаемых в разрыв сетевого подключения и передающих трафик подключения на отдельный порт.
  • "Трюк" с концентратором — порт коммутатора, трафик которого необходимо прослушать, включают через концентратор, подключив к концентратору также узел-монитор (при этом в большинстве случаев уменьшается производительность сетевого подключения).
  • Существуют программы (сетевые мониторы или анализаторы, sniffer), которые реализуют функцию прослушивания сетевого трафика (в т.ч. в беспорядочном режиме), отображения его или записи в файл. Дополнительно ПО для анализа может фильтровать трафик на основе правил, декодировать (расшифровать) протоколы, считать статистику и диагностировать некоторые проблемы.

    Примечание: Хорошим выбором базового инструмента для анализа сетевого трафика в графической среде является бесплатный пакет , доступный для Windows и в репозиториях некоторых дистрибутивов Linux.

    Утилита tcpdump

    Консольная утилита tcpdump входит в состав большинства Unix-систем и позволяет перехватывать и отображать сетевой трафик . Утилита использует libpcap, переносимую C/C++ библиотеку для перехвата сетевого трафика.

    Для установки tcpdump в Debian можно использовать команду:

    # apt-get install tcpdump

    Для запуска данной утилиты необходимо иметь права суперпользователя (в частности, в связи с необходимостью перевода сетевого адаптера в "беспорядочный" режим). В общем виде формат команды имеет следующий вид:

    tcpdump  <опции>   <фильтр-выражение>

    Для вывода на консоль описание заголовков (расшифрованные данные) перехваченных пакетов необходимо указать интерфейс для анализа трафика (опция -i ):

    # tcpdump -i eth0

    Можно отключить преобразования IP адресов в доменные имена (т.к. при больших объемах трафика создается большое число запросов к DNS-серверу) — опция -n:

    # tcpdump -n -i eth0

    Для вывода данных канального уровня (например, mac адреса и прочее) - опция -e:

    # tcpdump -en -i eth0

    Вывод дополнительной информации (например, TTL, опции IP) — опция -v:

    # tcpdump -ven -i eth0

    Увеличение размера захватываемых пакетов (больше 68 байт по умолчанию) — опция -s с указанием размера ( -s 0 — захватывать пакеты целиком):

    # tcpdump -s 0

    Запись в файл (непосредственно пакеты - "дамп" ) - опция -w с указанием имени файла:

    # tcpdump -w traf.dump

    Чтение пакетов из файла — опция - r с указанием имени файла:

    # tcpdump -r traf.dump

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

    Дополнительную информацию по ключам и формате фильтров tcpdump можно получить в справочном руководстве ( man tcpdump ).

    Анализ трафика на уровне сетевых интерфейсов и сетевом уровне с помощью tcpdump

    Для выделения Ethernet-фреймов используются следующие конструкции tcpdump (общий вид):

    tcpdump ether { src | dst | host } MAC_ADDRESS

    где srcMAC-адрес источника, dstMAC-адрес назначения, hostsrc или dst, а также для выделения широковещательного трафика:

    tcpdump ether  broadcast

    Например:

    # tcpdump -n -i vlan0 ether src 0:2:b3:d8:d8:2c
    # tcpdump -n -e -i vlan0 ether broadcast

    В первом случае выбираются с интерфейса vlan0 фреймы с указанным MAC-адресом источника. Во втором - выбирается широковещательный трафик на интерфейсе vlan0.

    Фильтрация по IP адресам ( net — сеть, для указания маски подсети - mask ):

    tcpdump { src | dst } { net | host }

    Например:

    # tcpdump -n -i eth0 src 192.168.66.1
    # tcpdump -n -i eth0 host 192.168.66.1
    # tcpdump -n -i eth0 src net 10.0.0.0 mask 255.0.0.0

    В первом случае фильтруются сетевые пакеты, в заголовке которых в поле источник указан IP-адрес 192.168.66.1. Во втором случае — пакеты, в которых данный IP-адрес указан как источник или как получатель пакета. В третьем — пакеты, в которых источником указаны узлы сети 10.0.0.0/8.

    Фильтрация по IP протоколу:

    tcpdump { arp | rarp | ip | tcp | udp | icmp }

    Например, выбирать ICMP-пакеты:

    # tcpdump -n -i eth0 icmp

    Сложные фильтры могут содержать множество примитивов, связанных между собой с использованием логических операторов and, or и not.

    Например: host 192.168.12.5 and host 192.168.13.4.

    Анализ работы протокола ARP

    Используем хостовую систему и виртуальную машину с сетевым адаптером, настроенным на виртуальную сеть узла. Установим на сетевом адаптере виртуальной машины IP-адрес из той же подсети, что и на адаптер vboxnet0 (адаптер виртуальной сети узла) основной системы.

    Настройки адаптера vboxnet0 в основной системе:

    # ip addr show dev vboxnet0
    5: vboxnet0:  <BROADCAST,MULTICAST,UP,LOWER_UP>  mtu 1500 qdisc pfifo_fast
        state UNKNOWN qlen 1000
        link/ether 0a:00:27:00:00:00 brd ff:ff:ff:ff:ff:ff
        inet 192.168.56.1/24 brd 192.168.56.255 scope global vboxnet0
        inet6 fe80::800:27ff:fe00:0/64 scope link 
           valid_lft forever preferred_lft forever

    Настройки сетевого адаптера в виртуальной машине:

    # ip addr show dev eth1
    3: eth1:  <BROADCAST,MULTICAST,UP,LOWER_UP>  mtu 1500 qdisc 
        pfifo_fast state UP qlen 1000
        link/ether 08:00:27:fd:e5:aa brd ff:ff:ff:ff:ff:ff
        inet 192.168.56.33/24 scope global eth1
        inet6 fe80::a00:27ff:fefd:e5aa/64 scope link 
           valid_lft forever preferred_lft forever

    Можно проверить командой ip neigh show dev vboxnet0, что в ARP-таблице основной системы нет записей связанных с интерфейсом vboxnet0.

    Откроем еще одну консоль на основной системе и запустим tcpdump:

    # tcpdump -ne -i vboxnet0
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on vboxnet0, link-type EN10MB (Ethernet), capture size 65535 bytes

    Запустим ping виртуальной машины с основной системы:

    # ping -c 1 192.168.56.33 
     PING 192.168.56.33 (192.168.56.33) 56(84) bytes of data. 
     64 bytes from 192.168.56.33: icmp_req=1 ttl=64 time=1.06 ms 
     --- 192.168.56.33 ping statistics --- 
     1 packets transmitted, 1 received, 0% packet loss, time 0ms 
     rtt min/avg/max/mdev = 1.067/1.067/1.067/0.000 ms

    В ARP-таблице основной системы появилась запись об IP-адресе виртуальной машины:

    # ip neigh show dev vboxnet0
    192.168.56.33 lladdr 08:00:27:fd:e5:aa STALE

    Вывод tcpdump:

    # tcpdump -ne -i vboxnet0
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on vboxnet0, link-type EN10MB (Ethernet), capture size 65535 bytes
    12:16:29.465780 0a:00:27:00:00:00 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), 
          length 42: Request who-has 192.168.56.33 tell 192.168.56.1, length 28
    12:16:29.466786 08:00:27:fd:e5:aa > 0a:00:27:00:00:00, ethertype ARP (0x0806), 
          length 42: Reply 192.168.56.33 is-at 08:00:27:fd:e5:aa, length 28
    12:16:29.466815 0a:00:27:00:00:00 > 08:00:27:fd:e5:aa, ethertype IPv4 (0x0800), 
       length 98: 192.168.56.1 > 192.168.56.33: ICMP echo request, id 5284, seq 1, length 64
    12:16:29.467934 08:00:27:fd:e5:aa > 0a:00:27:00:00:00, ethertype IPv4 (0x0800),
       length 98: 192.168.56.33 > 192.168.56.1: ICMP echo reply, id 5284, seq 1, length 64
    ^C
    4 packets captured
    4 packets received by filter
    0 packets dropped by kernel

    Каждая запись о сетевом пакете в таком формате содержит время перехвата пакета, MAC-адреса отправителя и получателя, тип протокола, длину пакета и сведения о содержимом пакета. Первая запись описывает широковещательный ARP-запрос с MAC-адреса интерфейса vboxnet0 основной системы ("У кого адрес 192.168.56.33 ответь 192.168.56.1"). Вторая запись — ответ с MAC-адреса виртуальной машины на MAC-адрес основной системы ("192.168.56.33 имеет определенный MAC-адрес"). Третья и четвертая записи (ICMP-запрос и ICMP-ответ) являются результатом работы команды ping на основной системе.

    Таким образом, основная система для того, чтобы отправить стандартный эхо-запрос виртуальной машине, предварительно по протоколу ARP получила MAC-адреса виртуальной машины и внесла его с привязкой к IP-адресу в свою ARP-таблицу.

    Работа tcpdump была прервана комбинацией клавиш Ctrl+C. Перед завершением работы tcpdump печатает статистику работы: количество перехваченных, полученных фильтром и отброшенных ядром пакетов.

    Анализ трафика на транспортном уровне с помощью tcpdump

    Для фильтрации трафика определенного порта на транспортном уровне можно использовать ключевое слово port. Например:

    # tcpdump -n -i eth0 src port 53
    # tcpdump -n -i eth0 tcp port 80

    В первом случае будут отбираться пакеты, несущие единицы передачи транспортного уровня (TCP или UDP), в которых порт-источник установлен в 53. Во втором случае — пакеты с TCP-сегментами, у которых порт источника или назначения равен 80.

    Обратимся с основной системы к WEB-серверу, установленному на виртуальной машине:

    # lynx 192.168.56.33

    предварительно, запустив tcpdump на другой консоли:

    # tcpdump -n -i vboxnet0 host 192.168.56.33 and port 80
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on vboxnet0, link-type EN10MB (Ethernet), capture size 65535 bytes
    15:44:37.837393 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [S], seq 1209026235, 
          win 5840, options [mss 1460,sackOK,TS val 2934847 ecr 0,nop,wscale 7], length 0
    15:44:37.838118 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [S.], seq 370041518, 
          ack 1209026236, win 5792, options [mss 1460,sackOK,TS val 3275261 ecr 
          2934847,nop,wscale 2], length 0
    15:44:37.838157 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [.], ack 1, 
          win 46, options [nop,nop,TS val 2934847 ecr 3275261], length 0
    15:44:37.839254 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [P.], seq 1:222, 
          ack 1, win 46, options [nop,nop,TS val 2934847 ecr 3275261], length 221
    15:44:37.839921 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [.], ack 222, 
          win 1716, options [nop,nop,TS val 3275262 ecr 2934847], length 0
    15:44:37.848118 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [P.], seq 1:446, 
          ack 222, win 1716, options [nop,nop,TS val 3275264 ecr 2934847], length 445
    15:44:37.848156 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [.], ack 446, 
          win 54, options [nop,nop,TS val 2934848 ecr 3275264], length 0
    15:44:37.849738 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [F.], seq 446, 
          ack 222, win 1716, options [nop,nop,TS val 3275264 ecr 2934848], length 0
    15:44:37.850366 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [F.], seq 222,
          ack 447, win 54, options [nop,nop,TS val 2934848 ecr 3275264], length 0
    15:44:37.851267 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [.], ack 223, win 1716, 
          options [nop,nop,TS val 3275265 ecr 2934848], length 0
    …

    В данном примере клиент (192.168.56.1) c TCP-порта 41533 устанавливает соединение с сервером (192.168.56.33), слушающим на порту 80, делает запрос, получает необходимые данные и соединение завершается.

    Заголовок TCP-сегмента, помимо номеров портов получателя и отправителя содержит ряд параметров :

  • Номер последовательности ( seq ). Определяет порядок следования байт в отправляемом в сеть потоке (смещение первого байта в сегменте относительно начала потока данных).
  • Подтвержденный номер ( ACK ). Максимальный номер байта в полученном сегменте увеличенный на 1. Отправляемые отправителю подтверждения одновременно служат запросом новой порции данных.
  • Управляющие флаги ( SYN - S, ACK, FIN -F , RST — R , PSH - P, URG )
  • Окно ( win ) — количество байтов данных, ожидаемых отправителем данного, начиная с байта номер которого указан в поле ack. Для оптимизации передачи отправитель не ждет подтверждения для каждого отправленного сегмента, а может отправить в сеть группу сегменту (но в байтах не больше размера окна). Если качество канала плохое (много запросов на повторную передачу, теряются подтверждения) окно уменьшается, если хорошее — окно увеличивается.
  • Опции. Используются для решения вспомогательных задач. Например, передается MSS (Maximum segment size) — максимальный размер сегмента.
  • Процесс установления двунаправленного соединения по протоколу TCP отражают первые три записи tcpdump:

  • Клиент отправляет серверу TCP-сегмент с установленым флагом SYN, начальным "случайным" номером ( 1209026235 ), с которого будут нумероваться байты в отправляемом им потоке, максимальный размер окна — объем, который разрешено передавать серверу без подтверждения от клиента (5840):
    15:44:37.837393 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [S], seq 1209026235, 
       win 5840, options [mss 1460,sackOK,TS val 2934847 ecr 0,nop,wscale 7], length
  • Сервер отправляет клиенту TCP-сегмент с установленными флагами SYN и ACK, начальным "случайным" номером ( 370041518 ), с которого будут нумероваться байты в отправляемом им потоке, и максимальный размер окна для клиента (5792). Данный сегмент также является подтверждением получения запроса на установление соединения от клиента:
    15:44:37.838118 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [S.], seq 370041518, 
       ack 1209026236, win 5792, options [mss 1460,sackOK,TS val 3275261 ecr 2934847,nop,wscale 2], length
  • Клиент отправляет серверу TCP-сегмент с установленным флагом ACK, который является подтверждением получения сегмента от сервера (далее tcpdump отображает относительные значения seq и ask ):
    15:44:37.838157 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [.], ack 1, win 46,
       options [nop,nop,TS val 2934847 ecr 3275261], length
  • После этого соединение считается установленным.

    В следующей паре записей клиент передает в секции данных сегмента серверу запрос протокола прикладного уровня (221 байт) и получает от сервера подтверждение его получения:

    15:44:37.839254 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [P.], seq 1:222, 
       ack 1, win 46, options [nop,nop,TS val 2934847 ecr 3275261], length 221
    15:44:37.839921 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [.], ack 222, win 1716, 
       options [nop,nop,TS val 3275262 ecr 2934847], length 0

    При этом флаг PSH (P) используется для оповещения отправляющей стороны о том, что принимающая готова принимать данные.

    Далее сервер отправляет данные клиенту (445 байт) и получает от него подтверждение получения:

    15:44:37.848118 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [P.], seq 1:446, 
       ack 222, win 1716, options [nop,nop,TS val 3275264 ecr 2934847], length 445
    15:44:37.848156 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [.], ack 446, 
       win 54, options [nop,nop,TS val 2934848 ecr 3275264], length 0

    Затем по инициативе сервера соединение завершается. Сервер шлет сегмент с установленным флагом FIN:

    15:44:37.849738 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [F.], seq 446,
       ack 222, win 1716, options [nop,nop,TS val 3275264 ecr 2934848], length 0

    Клиент в ответ также отправляет сегмент с установленным флагом FIN ; данный сегмент одновременно является подтверждением получения запроса на завершение соединения от сервера:

    15:44:37.850366 IP 192.168.56.1.41533 > 192.168.56.33.80: Flags [F.], seq 222, 
       ack 447, win 54, options [nop,nop,TS val 2934848 ecr 3275264], length 0

    Серверу остается лишь подтвердить получение FIN-сегмента от клиента.

    15:44:37.851267 IP 192.168.56.33.80 > 192.168.56.1.41533: Flags [.], ack 223,
       win 1716, options [nop,nop,TS val 3275265 ecr 2934848], length 0
    21:56:14.381091 IP 192.168.56.1.54040 > 192.168.56.33.23: Flags [S], seq 2956835311,
       win 5840, options [mss 1460,sackOK,TS val 5164501 ecr 0,nop,wscale 7], length 0
    21:56:14.381688 IP 192.168.56.33.23 > 192.168.56.1.54040: Flags [R.],
       seq 0, ack 2956835312, win 0, length 0

    В данном примере с системы 192.168.56.1 делается попытка подключится к несуществующему TCP-сервису на узле 192.168.56.33. Удаленная система реагирует отправкой сегмента с установленным флагом RST (сброса соединения).

    21:55:16.925906 IP 192.168.56.1.41979 > 192.168.56.33.53: 6561+ A? www.tut.by. (28)
    21:55:16.926615 IP 192.168.56.33 > 192.168.56.1: ICMP 192.168.56.33 udp port 53 unreachable, length 64

    В данном примере сделана попытка отправить UDP-датаграмму на несуществующий порт удаленной системы. Протокол UDP обычно реагирует отправкой ICMP-сообщения исходному узлу о недостижимости порта.

    Ключевые термины

    Беспорядочный (promiscuous) режим — режим работы сетевого адаптера, при котором принимаются все фреймы, а не те, которые предназначены данному узлу, как в обычном состоянии.

    Сетевой монитор или анализатор (sniffer) — средство для перехвата и анализа сетевого трафика.

    Краткие итоги

  • Для анализа трафика узла (а также для анализа трафика сетевого сегмента) можно использовать специальные средства — сетевые анализаторы или мониторы.
  • В Unix-подобных ОС утилита tcpdump позволяет выполнять базовые операции по перехвату сетевого трафика, декодирования протоколов, записи и чтения сетевого трафика в файл, фильтрации трафика для анализа и т. д.
  • Для анализа трафика в графическом режиме пользователя можно использовать пакет wireshark.
  • Упражнения

    1.В среде VirtualBox запустите виртуальную машину (ВМ) с установленным Debian GNU\Linux и установленным HTTP-сервером с одной сетевой картой, предварительно установив тип сетевого подключения "Виртуальная сеть узла" .

    Изучите процесс взаимодействия между HTTP-сервером, установленным на ВМ, и клиентом на основной системе:

    1.1.Запустите на консоле ВМ утилиту tcpdump c параметрами -nve.

    1.2.В основной системе запустите командный интерпретатор и используя утилиту telnet установите TCP соединение с HTTP-сервером, слушающим на 80 порту ВМ:

    # telnet  <IP-адрес ВМ>  80

    Затем отправьте ВМ запрос корневой страницы, закончив ввод двойным нажатием клавиши enter:

    GET / HTTP/1.1    
    Host: <IP-адрес ВМ>

    Сервер должен выдать ответ с кодом 200 (HTTP/1.1 200 OK)

    1.3.Переключитесь в ВМ и, используя результаты работы tcpdump, последовательно изучите ход сетевого соединения.

    2.Для данного упражнения необходимо, чтобы в виртуальной машине с установленным Debian GNU\Linux были установлены HTTP и SSH-сервера. Сетевая карта виртуальной машины должна быть подключена к виртуальной сети узла VirtualBox.

    2.1.Запустите на консоли виртуальной машины tcpdump таким образом, чтобы перехваченные пакеты в низкоуровневом формате записывались в файл (дамп трафика). Далее:

  • Проверьте доступность виртуальной машины с основной с помощью ping.
  • Проверьте доступность основной системы с виртуальной с помощью ping.
  • Запустите Интернет-обозреватель в основной системе и запросите страницу с HTTP-сервера виртуальной машины.
  • Затем, используя клиент ssh (для Windows можно использовать putty или winscp ), подключитесь с основной системы к виртуальной машине и отключитесь).
  • Используя утилиту telnet, попробуйте подключиться с основной системы к виртуальной машине на порт 8080.
  • Попробуйте с виртуальной машины сделать DNS-запрос на разрешение имени http://www.yandex.ru, используя утилиту nslookup (apt-get install dnsutils).
  • Удалите из ARP-таблицы виртуальной машины запись о MAC-адресе основной системы, а затем проверьте доступность основной системы с помощью ping.
  • Затем прервите работу tcpdump комбинацией клавиш Ctrl+C.

    2.2.Сконструируйте правила tcpdump, которые бы из полученного файла дампа отображали:

    2.2.1.Все ICMP-пакеты

    2.2.2.ICMP-пакеты, отправленные основной системой

    2.2.3.Взаимодействие по протоколу TCP между основной системой и виртуальной машиной.

    2.2.4.Взаимодействие между HTTP-клиентом и HTTP-сервером.

    2.2.5.Взаимодействие между основной системой и TCP-портом 8080 виртуальной машины. Было ли это взаимодействие удачным?

    2.2.6.Отобразите весь UDP-трафик, который присутствует в файле дампа.

    2.2.7.Отобразите широковещательный трафик (с информацией уровня доступа к сети), который находится в файле дампа.

    2.2.8.Отобразите ARP-трафик, который содержится в дампе (с информацией уровня доступа к сети).

    3. В локальном сегменте сети (подсеть 192.168.6.0/24) сетевые станции не могут взаимодействовать друг с другом по протоколу IP. Изучить фрагмент вывода tcpdump и объяснить причину данной ситуации:

    $ tcpdump -ne -r ex3.dump 
    reading from file ex3.dump, link-type EN10MB (Ethernet)
    16:20:38.558302 00:00:00:00:00:01 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806),
       length 42: Request who-has 192.168.6.30 tell 192.168.6.5, length 28
    16:20:38.580672 00:00:00:00:00:03 > 00:00:00:00:00:01, ethertype ARP (0x0806),
       length 42: Reply 192.168.6.30 is-at 00:00:00:00:00:03, length 28
    16:20:38.639393 00:00:00:00:00:01 > 00:00:00:00:00:03, ethertype IPv4 (0x0800),
       length 42: 192.168.6.5 > 192.168.6.30: ICMP echo request, id 33887, seq 13729, length 8
    16:20:38.654419 00:00:00:00:00:02 > 00:00:00:00:00:01, ethertype ARP (0x0806),
       length 42: Reply 192.168.6.30 is-at 00:00:00:00:00:02, length 28
    16:20:38.683649 00:00:00:00:00:01 > 00:00:00:00:00:03, ethertype IPv4 (0x0800),
       length 42: 192.168.6.5 > 192.168.6.30: ICMP echo request, id 5362, seq 61839, length 8
    16:20:38.709642 00:00:00:00:00:04 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806),
       length 42: Request who-has 192.168.6.10 tell 192.168.6.4, length 28
    16:20:38.729719 00:00:00:00:00:05 > 00:00:00:00:00:04, ethertype ARP (0x0806),
       length 42: Reply 192.168.6.10 is-at 00:00:00:00:00:05, length 28
    16:20:38.748087 00:00:00:00:00:01 > 00:00:00:00:00:03, ethertype IPv4 (0x0800),
       length 42: 192.168.6.5 > 192.168.6.30: ICMP echo request, id 4309, seq 56734, length 8
    16:20:38.770256 00:00:00:00:00:03 > 00:00:00:00:00:04, ethertype ARP (0x0806),
       length 42: Reply 192.168.6.10 is-at 00:00:00:00:00:03, length 28
    16:20:38.803840 00:00:00:00:00:01 > 00:00:00:00:00:03, ethertype IPv4 (0x0800),
       length 42: 192.168.6.5 > 192.168.6.30: ICMP echo request, id 46657, seq 6367, length 8
    16:20:38.829548 00:00:00:00:00:04 > 00:00:00:00:00:05, ethertype IPv4 (0x0800),
       length 42: 192.168.6.4 > 192.168.6.10: ICMP echo request, id 6239, seq 43338, length 8
    16:20:38.861968 00:00:00:00:00:05 > 00:00:00:00:00:04, ethertype IPv4 (0x0800),
       length 42: 192.168.6.10 > 192.168.6.4: ICMP echo reply, id 0, seq 0, length 8
    16:20:38.885832 00:00:00:00:00:06 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806),
       length 42: Request who-has 192.168.6.20 tell 192.168.6.21, length 28
    16:20:38.914436 00:00:00:00:00:03 > 00:00:00:00:00:06, ethertype ARP (0x0806),
       length 42: Reply 192.168.6.20 is-at 00:00:00:00:00:03, length 28
    16:20:38.953113 00:00:00:00:00:04 > 00:00:00:00:00:05, ethertype IPv4 (0x0800),
       length 42: 192.168.6.4 > 192.168.6.10: ICMP echo request, id 41141, seq 12273, length 8
    16:20:38.978185 00:00:00:00:00:10 > 00:00:00:00:00:06, ethertype ARP (0x0806),
       length 42: Reply 192.168.6.20 is-at 00:00:00:00:00:10, length 28
    16:20:39.018692 00:00:00:00:00:01 > 00:00:00:00:00:03, ethertype IPv4 (0x0800),
       length 42: 192.168.6.5 > 192.168.6.30: ICMP echo request, id 15440, seq 26713, length 8
    16:20:39.037768 00:00:00:00:00:05 > 00:00:00:00:00:04, ethertype IPv4 (0x0800),
       length 42: 192.168.6.10 > 192.168.6.4: ICMP echo reply, id 0, seq 0, length 8
    16:20:39.073481 00:00:00:00:00:01 > 00:00:00:00:00:03, ethertype IPv4 (0x0800),
       length 42: 192.168.6.5 > 192.168.6.30: ICMP echo request, id 1117, seq 65455, length 8
    16:20:39.197000 00:00:00:00:00:06 > 00:00:00:00:00:03, ethertype IPv4 (0x0800),
       length 70: 192.168.6.21.21519 > 192.168.6.20.53: 28042 A? www.tut.by. (28)
    16:20:39.252522 00:00:00:00:00:1a > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806),
       length 42: Request who-has 192.168.6.20 tell 192.168.6.100, length 28
    16:20:39.270199 00:00:00:00:00:03 > 00:00:00:00:00:1a, ethertype ARP (0x0806),
       length 42: Reply 192.168.6.20 is-at 00:00:00:00:00:03, length 28
    16:20:39.293142 00:00:00:00:00:10 > 00:00:00:00:00:1a, ethertype ARP (0x0806),
       length 42: Reply 192.168.6.20 is-at 00:00:00:00:00:10, length 28
    16:20:39.408039 00:00:00:00:00:1a > 00:00:00:00:00:03, ethertype IPv4 (0x0800),
       length 72: 192.168.6.100.21455 > 192.168.6.20.53: 29961 A? www.aport.ru. (30)
    16:20:39.546045 00:00:00:00:00:06 > 00:00:00:00:00:03, ethertype IPv4 (0x0800),
       length 70: 192.168.6.21.55962 > 192.168.6.20.53: 64123 A? www.tut.by. (28)
    16:20:39.685004 00:00:00:00:00:1a > 00:00:00:00:00:03, ethertype IPv4 (0x0800),
       length 72: 192.168.6.100.30522 > 192.168.6.20.53: 41887 A? www.aport.ru. (30)
    Вернуться к учебному плану