Опубликован: 26.07.2011 | Уровень: для всех | Доступ: платный
Лекция 9:

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

< Лекция 8 || Лекция 9: 123 || Лекция 10 >

Анализ работы протокола 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
…
Листинг 9.2. Анализ работы протокола TCP

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

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

  • Номер последовательности ( 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
Листинг 9.3. Реакция на попытку подключения к закрытому порту TCP

В данном примере с системы 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
Листинг 9.4. Реакция на попытку отправки UDP-датаграммы на закрытый порт

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

< Лекция 8 || Лекция 9: 123 || Лекция 10 >
Нияз Сабиров
Нияз Сабиров

Здравствуйте. А уточните, пожалуйста, по какой причине стоимость изменилась? Была стоимость в 1 рубль, стала в 9900 рублей.

Елена Сапегова
Елена Сапегова

для получения диплома нужно ли кроме теоретической части еще и практическую делать? написание самого диплома требуется?

Иван Бузмаков
Иван Бузмаков
Россия, Сарапул
Никита Сомов
Никита Сомов
Россия, Удмуртская республика