title | institute | lang | geometry | mainfont | monofont | fontsize | colorlinks |
---|---|---|---|---|---|---|---|
Лабораторная работа № 1. Инструменты диагностики сетей |
кафедра Управления и информатики НИУ «МЭИ» |
ru-RU |
top=2cm, bottom=2cm, left=3cm, right=2cm |
PT Serif |
PT Mono |
12pt |
blue |
Требуется научиться:
- определять сетевые настройки машины;
- проверять доступность удаленных узлов и маршруты до них;
- захватывать, анализировать и сохранять сетевой трафик.
Предполагается, что вы знаете:
- об уровнях и протоколах сетевого взаимодействия, модель OSI (лекция 1);
- что такое IP-адрес и маска подсети, как их вычислять (СПО, ЛР по Linux);
- что такое DNS (там же).
Изученное в ходе ЛР пригодится:
- в учебе — для отладки программ на последующих ЛР;
- на практике — для поиска причин и источников неполадок (troubleshooting).
Примечание. В задании встречаются протоколы и инструменты, которые еще не изучались (traceroute, ICMP, UDP, TCP, DNS) — в таких местах даны краткие пояснения, а подробности будут рассмотрены на последующих занятиях.
(@) Просмотрите параметры сетевого подключения через GUI (графический интерфейс).
Для этого дважды щелкните на значке сетевого подключения (на панели
уведомлений в правом нижнем углу) и на вкладке «Поддержка» нажмите
кнопку «Подробности…».
Выделите все строки таблицы и занесите в отчет.
Можно наблюдать:
* физический адрес — адрес канального уровня (L2), он же MAC-адрес;
* IP-адрес — адрес сетевого уровня (L3);
* маску подсети, с помощью которой IP-адрес делится на адрес сети
(префикс) и номер узла в ней;
* основной шлюз — IP-адрес машины, через которую направляются пакеты
во внешнюю сеть;
* DHCP-сервер — IP-адрес машины, с помощью которой был получен IP-адрес
данной, то есть выполнена динамическая конфигурация IP;
* время, когда аренда получена — то есть выдан динамический IP —
и когда аренда истекает — то есть понадобится снова обратиться
к DHCP-серверу за новым адресом;
* DNS-сервер — IP-адрес машины, к которой данная будет обращаться
при необходимости разрешить (преобразовать) символьное имя
(например, `mpei.ru`) в IP-адрес.
(@) Просмотрите параметры сетевого подключения через командную строку.
Для этого откройте командную строку (Пуск → Выполнить, ввести `cmd`),
в ней выполните команду:
ipconfig /all
Саму команду и ее вывод скопируйте и занесите в отчет.
Раздел «Настройка протокола IP для Windows» относится ко всей машине,
а не к отдельным сетевым подключениям. В частности:
* по имени компьютера можно обратиться к нему *в локальной сети*,
однако эта возможность специфична для Windows и может быть выключена;
* IP-маршрутизация (обычно выключена) определяет, будет ли данный узел
пересылать пакеты, которые предназначены не ему.
Далее следуют разделы, описывающие сетевые подключения (обычно одно).
Присутствует и настройка, через GUI невидимая: «автонастройка включена» —
она означает, что в случае, когда адрес не задан статически, а DHCP-сервер
недоступен, интерфейс получит специальный адрес автоматической конфигурации.
Убедитесь, что показания в таком разделе соответствуют полученным из GUI
(кроме автонастройки адреса, которую проверять через GUI не нужно).
(@) Проанализируйте полученные настройки.
* Из IP-адреса и маски подсети определите и запишите адрес сети.
* Находится ли шлюз по умолчанию в той же сети? Если нет, то в какой?
* Находится ли сервер DHCP в той же сети?
* Находится ли сервер DNS в той же сети?
Команда ping
позволяет направить узло специальные запросы, на которые
тот должен ответить, чтобы подтвердить свою доступность.
(@) В командной строке выполните:
ping mpei.ru
Сделайте то же самое для других адресов:
* собственного IP-адреса машины (полученного в предыдущем разделе);
* основного шлюза;
* сервера DNS;
* `mos.ru`;
* `lab.facelessmen.org`;
Из показаний `ping` сведите в таблицу: символьный адрес узла,
его IP-адрес и среднее время отклика.
(@) Выполните команду:
ping mpei.ru
Как можно видеть, на запросы ping
не получено ответов, потери 100 %.
Это не означает, что узел недоступен (попробуйте зайти на сайт) — просто сервер
или промежуточное устройство настроены не давать ответов на запросы,
которые шлет ping
. Это делается для безопасности: ping
позволяет
сканировать доступность узлов и сервисов на них, способен создать нагрузку
на сервер.
Полезно бывает отследить маршрут (trace route) прохождения пакета
до заданного узла. В Linux соответствующая программа называется
traceroute
, в Windows — tracert
.
(@) Выполните команду:
tracert lab.facelessmen.org
Занесите команду и ее вывод в отчет.
Можно наблюдать два факта:
-
Не для всех узлов можно получить символьное имя по IP. Если символьное имя и не нужно, у
tracert
есть ключ-d
. -
Не все пункты маршрута удается установить — как минимум, это узлы, настроенные не слать ответы на запросы
tracert
, а некоторые узлы блокируют и чужие ответы (как правило, на границах защищенных сетей).
Как известно, пакеты направляются на адреса сетевого уровня, в типичном
случае — на IP-адреса, а люди пользуются символьными именами, например,
facelessmen.org
. Разрешением (resolution, т. е. преобразованием) символьных
имен в адреса занимается система доменных имен (Domain Name System — DNS).
Сервер DNS содержит базу соответствия имен адресам; клиент запрашивает
по протоколу DNS адрес для имени, сервер отвечает ему.
(@) Выполните команду:
nslookup facelessmen.org
Занесите команду и ее вывод в отчет.
«Non-authoritative answer» означает, что ответ дан не официальным сервером DNS,
обслуживающим вышестоящую зону — в случае facelessmen.org
, зону org.
—
а промежуточным сервером DNS. Это нормально. Промежуточные сервера кэшируют
(запоминают) ответы вышестоящих, чтобы снизить на них нагрузку и отвечать
быстрее.
Кэшируют ответы DNS не только сервера, но и клиенты, в том числе локальная машина. Обычно это ускоряет работу и потому удобно, но для лабораторной работы или при проблемах с DNS кэшированный ответ мешает понять, что происходит. Можно сбросить кэш специальной командой:
ipconfig /flushdns
Все проходящие через машину сетевые пакеты можно захватить (capture) и пристально изучить. Это радикальный способ отладки программ, исследования протоколов и отслеживания проблем.
Программа Wireshark позволяет как захватить сетевой трафик, так и с удобством просмотреть его, исследовать в разных разрезах, собрать статистику.
Примечание. В лаборатории установлена Wireshark 1.10 — последняя версия, поддерживающая Windows XP; новейшая версия Wireshark — 2.4 (на февраль 2018).
Исследуем, что происходит в сети при заходе на web-страницу.
(@) Запустите Wireshark из меню «Пуск».
На главной странице доступны ссылки на справку («Online» справа), список недавних файлов («Files» по центру) и главный интересующий нас раздел «Capture». По существу, в нем можно выбрать, с каких сетевых интерфейсов (например: кабельного подключения, Wi-Fi) и какие именно данные захватывать.
(@) Откройте диалог «Capture options» и настройте захват пакетов, который относятся к заходу на web-страницу по основному сетевому интерфейсу.
* В списке интерфейсов (вверху) отметьте тот, который исследовали
в начале лабораторной работы.
* В поле «Capture filter» введите выражение:
`(dst <IP> and tcp port 80) or (udp port 53) or icmp`
При вводе замените `<IP>` на IP-адрес `lab.facelessmen.org`,
который можно получить через `nslookup`.
* Не закрывайте диалог.
Смысл фильтра захвата — отобрать только запрос страницы и ответ на него
с собственно страницей (tcp port 80
), запросы и ответы DNS (udp port 53
),
а также служебные сообщения ICMP (icmp
), появляющиеся при некоторых ошибках.
Часть dst <IP>
фильтрует сеансы связи с lab.facelessmen.org
(в фильтре
захвата нет возможности использовать символьные имена).
(@) Очистите кэш браузера.
В лаборатории установлен Internet Explorer 8, где это делается из меню
*Сервис → Удалить журнал обозревателя…* с обязательно установленной галочкой
*Временные файлы интернета*.
(@) Очистите кэш DNS. Иногда очистка через ipconfig
не срабатывает,
так как браузер имеет свой кэш DNS — тогда браузер нужно перезапускать.
(@) В Wireshark запустите захват пакетов кнопкой «Start» диалога настройки захвата. Вне диалога это делалось бы кнопкой «Start capture».
(@) В адресной строке браузера введите адрес:
lab.facelessmen.org
и нажмите выполните переход (нажмите *Enter* или кнопку).
В Wireshark должны появится два пакета DNS (выделяются голубым) и несколько пакетов HTTP (выделяются салатовым).
(@) Остановите захват пакетов красной кнопкой «Stop capture» слева вверху.
Рабочее окно Wireshark разделено на три области (сверху-вниз):
-
Список пакетов со столбцами их свойств и подсветкой в зависимости от типа.
-
Результат разбора пакета (dissection — термин Wireshark), то есть структурированное представление пакета, разобранного в соответствии с протоколами.
-
Содержимое пакета в виде байт в шестнадцатеричном виде (hex) и соответствующего им текста. Числа
0000
,0010
и т. д. по левому краю — смещения от начала пакета в hex, то есть 0, 16 и т. д.
Области диссекции и содержимого пакета связаны. При выборе поля или уровня диссекции подсвечиваются соответствующие байты в содержимом. И наоборот — при щелчке на байте содержимого подсвечивается элемент диссекции, к которому этот байт относится.
Над списком пакетов есть поле фильтра, позволяющее дополнительно отобрать
захваченные пакеты. В строке состояния внизу окна отображается общее число
пакетов (packets) и количество отображаемых из них (displayed).
Фильтр — логическое выражение, включающее свойства пакета. Список свойств
можно увидеть в диалоге «Expression…» рядом с фильтром. Обратите внимание,
что [синтаксис][wireshark/filter] этого фильтра (отображения) отличается
от фильтра захвата: например, вместо tcp port 80
пишется tcp.port == 80
.
В списке пакетов отображаются их основные свойства:
- номер пакета;
- время прохождения (по умолчанию — в секундах от начала захвата);
- IP-адреса источника (source) и получателя (destination);
- протокол верхнего уровня;
- полная длина;
- краткая сводка (info), отражающая суть пакета.
В зависимости от задачи бывает полезно видеть и другие поля. Добавим столбцы с портами и будем отображать порты в числовом виде в сводке.
(@) В диалоге Edit → Preferences… выберите раздел Columns.
(@) Добавьте столбец с портом отправителя: внизу в выпадающем списке выберите Src port (unresolved) и нажмите Add, переименуйте столбец, щелкнув по его мени в таблице. Перетащите его мышью перед столбцом Protocol.
В этом же диалоге можно удалять ненужные столбцы кнопкой *Remove.*
(@) Сделайте то же самое для порта получателя Dest port (uresolved).
(@) Перейдите в раздел Name resolution и снимите галочку Resolve transport names.
(@) Закройте диалог кнопкой OK и убедитесь, что новые столбцы появились.
Вид времени прохождения можно менять в меню View → Time display format. Нужно понимать, что у Wireshark не всегда есть информация о том, в каком часовом поясе захвачен трафик (при анализе файлов — см. ниже), поэтому отображение абсолютного времени может быть со смещением.
Результаты разбора сгруппированы по протоколам и упорядочены по уровням от нижнего (L2, канального) к верхнему (L7, прикладному). Внутри уровней выделены поля данных. В квадратных скобках показываются косвенные показатели, которые в пакет непосредственно не записаны.
Рассмотрим пакет с ответом DNS («standard query response» в сводке). Уровни:
-
Frame — условный уровень, на котором Wireshark отображает сведения об интерфейсе, с которого был захвачен пакет, с времени захвата.
-
Ethernet II — канальный уровень (L2). Его свойств немного:
-
MAC-адреса отправителя (Src) и получателя (Dst). Они показаны как 6 байт в hex (так они записаны в пакете), а также с префиксом-названием производителя оборужования, потому что диапазоны адресов приписаны к ним.
-
Протокол следующего уровня (L3) в виде кода (так записано в пакете) и по названию (из справочника).
-
-
Internet Protocol Version 4 — сетевой уровень (L3), пакет IPv4. Среди его свойств есть IP-адрес отправителя (Src) и получателя (Dst). Можно убедиться, что они совпадают с собственным адресом машины и адресом сервера DNS, установленного в начале ЛР.
-
User Datagram Protocol — транспортный уровень (L4). На этом уровне определяется, какому приложению предназначен пакет, по номерам портов: отправителя (Src port) по получателя (Dst port). В данном случае пакет отправлен сервером DNS, который работает на порту 53, а получен клиентом DNS на порту со случайным большим номером.
-
Domain Name System (response) — прикладной уровень (L7). Собственно сообщение-ответ на запрос, какой IP у
lab.facelessmen.org
. Стоит отметить:-
поле [Request In: …] — ссылку на пакет с запросом, к которому относится рассматриваемый ответ;
-
поле Transaction ID, одинаковое в запросе и ответе, чтобы клиент мог отправить несколько запросов, а затем связать ответы с ними — фактически это поле играет роль сеансового (L5) уровня, хотя отдельного протокола под это не выделено.
-
(@) В области разбора пакета выделите последовательно L2, L3, L4, L7 и проследите в области содержимого пакета, что они расположены последовательно — это и есть инкапсуляция уровней.
(@) В области содержимого пакета выберите несколько байт, чтобы увидеть, каким полям и каких уровней они соответствуют.
При исследованиях трафика, особенно сообща с другими специалистами, бывает полезно добавить к пакетам текстовые комментарии. Для этого нужно использовать пункт Packet comment… контекстного меню пакета в списке.
(@) Добавьте к рассматриваемому пакету комментарий «look at me
».
По комментариям можно пакеты искать (фильтровать):
- фильтр
pkt_comment
илиframe.comment
выбирает все пакеты с комментариями; - фильтр
frame.comment contains "look"
выбирает пакеты, комментарий к которым содержит подстрокуlook
.
(@) Введите фильтр отображения: http || dns || icmp
.
Хотя он одинаков по сути с фильтром захвата, но сообщает Wireshark, что нас интересуют не просто пакеты через порт 80 по протоколу TCP, а именно сообщения HTTP (они же, но на уровне L7). В результате количество пакетов в списке сократилось: остались только несущие сообщения, а служебные скрыты.
(@) Щелкнув по любому пакету HTTP (салатовому) правой кнопкой мыши, выберите в контекстном меню Follow TCP stream (проследить сеанс).
В открывшемся окне показаны данные, переданные клиентом серверу (подсвечены красным) и от сервера клиенту (подсвечены синим). Как можно наблюдать:
-
Протокол имеет текстовый формат. Для случаев, когда это не так, имеется возможность переключить просмотр в режим отображения байт (Hex Dump).
-
Помимо непосредственно текста страницы передается немало служебных данных.
(@) Закройте окно слежения за сеансом.
Обратите внимание, что фильтр отображения изменился на tcp.stream eq 0
:
число в конце (0
в примере) — порядковый номер сеанса из всех захваченных.
Соответственно, пропала фильтрация только пакетов с сообщениями HTTP.
Если просмотреть пакеты, в большинстве нет данных выше Transmission Control
Protocol (TCP) — это служебные пакеты L4+L5, нужные для установления,
поддержки и завершения сеанса. Они будут рассмотрены на последующих ЛР.
(@) Верните предыдущий фильтр отображения.
Они сохраняются в выпадающем списке поля фильтра.
После выбора нужно применить фильтр, нажав *Enter* или кнопку *Apply.*
Иногда отдельные пакеты не представляют большого интереса, зато можно сделать выводы по статистике трафика. Опробуем важнейшие средства из меню Statistics. В каждом пункте нужно открыть соответствующий диалог и ознакомиться с его содержимым и возможностями.
(@) Protocol Hierarchy — сводка, какие протоколы и насколько часто встречаются в захваченном трафике. Позволяет сразу обнаружить сетевую активность, которой быть не должно, или наоборот.
(@) Conversations — сеансы в широком смысле, то есть не только L5, но и обмены данными, например, по протоколу DNS.
(@) Endpoints — уникальные адреса и порты участников.
(@) Packet Lengths — гистограмма распределения длин пакетов. Полезна для выявления аномальной активности или для оптимизации настроек сетевого ПО и аппаратуры.
(@) IO Graph — график пакетов или байт в секунду.
Полезен для анализа нагрузки и обнаружения времени атак.
Если на графике не наблюдается активности, можно уменьшить Tink interval.
Сохраните график как рисунок lab01-tools-iograph.png
.
(@) Flow Graph… — диаграмма последовательности переданных пакетов.
Постройте ее для отображаемых пакетов (Displayed packets)
всех видов (General flow) с отображением сетевых адресов
(Network source/destination addresses). Сохраните результат
в текстовый файл lab01-tools-flowgraph.txt
.
Далеко не всегда пакеты захватываются в Wireshark, сразу же анализируются и забываются. Гораздо чаще захват происходит:
- в то время, когда наблюдается интересующий трафик;
- на той машине (устройстве), где это возможно;
- не обязательно Wireshark (
tcpdump
, встроенными средствами оборудования).
Анализ же выполняется отдельно, иногда не одним человеком и по несколько раз. Очевидно, для этого нужно сохранять захваченные пакеты в файл, чтобы передавать его и анализировать трафик offline.
(@) Выберите пункт меню File → Save и сохраните запись трафика
в файл lab01-tools.pcapng
.
Здесь необходимо обратить внимание на формат файла:
-
Wireshark/tcpdump/…
*.pcap
(packet capture) — классический формат. Не вполне универсален и не расширяем, зато поддерживается всеми средствами обработки записей трафика. -
Wireshark/…
*.pcapng
(pcap next generation) — современный формат Wireshark: позволяет сохранять комментарии к пакетам, расширяем в будущем, однако не поддерживается многими небольшими утилитами для обработки записей трафика. -
То же с «nanosecond precision» — времена прохождения пакетов записываются с точностью до наносекунд, что бывает нужно на быстрых интерфейсах.
Wireshark позволяет открыть файл в одном формате и сохранить в другом.
В аналогичном диалоге File → Export specified packets… можно выбрать, какие пакеты сохранять: все, отображаемые или с выбранными номерами.
(@) Убедитесь, что файл сохранился, и закройте Wireshark. Выберите файл в «Проводнике» и откройте его в Wireshark.
Иногда нужно экспортировать не пакеты, а результаты их разбора, то есть, по сути, область списка пакетов, область разбора пакета или обе сразу. Для этого применяется пункты меню из группы File → Export packet dissections: можно экспортировать данные как в текстовом виде для чтения (…as "Plain Text" file), так и в структурированных видах.
В открывшемся диалоге можно выбрать, что сохранять (убедитесь, что диалог растянут до размера, когда можно видеть все настройки в его нижней части):
- packet summary — строку из списка пакетов;
- packet details — результат разбора в текстовом виде;
- packet bytes — содержимое пакета как байты в шестнадцатеричном виде.
(@) Сохраните только список пакетов, без результатов их разбора,
как текстовый файл lab01-tools-export.txt
.
На сайте Wireshark есть познавательный сборник записей трафика разных протоколов.
Примечание. Во всех вопросах «привести пример» означат открыть запись трафика в Wireshark и продемонстрировать требуемое.
#. Может ли быть настроен IP-адрес, но не настроен шлюз по умолчанию? Если да, к чему это приведет; если нет, почему?
#. Может ли быть настроен IP-адрес, но не выбран сервер DHCP? Если да, в каком случае и на что это повлияет; если нет, почему?
#. Может ли быть настроен IP-адрес, но не настроен сервер DNS? Если да, к чему это приведет; если нет, почему?
#. Если не настроено статического адреса и не работает DHCP, получит ли интерфейс адрес (при настройках, наблюдавшихся в ЛР), и если да, какой?
#. Можно ли с компьютера под управлением Windows с помощью ping
проверить доступность компьютера под управленим Linux? А наоборот?
#. Верно ли, что если не приходят ответы на ping
, сервер недоступен по сети?
Если да, приведите пример из ЛР; если нет, в каком случае?
#. Может ли IP-адрес не иметь доменных имен? А наоборот?
#. Можно ли настройкой машины с IP-адресом добиться, чтобы этот адрес нельзя было найти по доменному имени? Если да, в каком случае; если нет, почему?
#. Возможно ли по IP-адресу узнать его доменные имена?
#. Можно ли с помощью Wireshark перехватить трафик, идущий непосредственно между двумя другими машинами (без удаленного доступа к этим машинам)?
#. Как с помощью Wireshark захватить трафик и через кабель, и через Wi-Fi?
#. Как в Wireshark ограничить перечень захватываемых пакетов? Приведите пример не из ЛР.
#. Как в Wireshark отфильтровать захваченные пакеты? Приведите пример не из ЛР.
#. Исследователю нужно проанализировать задержки между пакетами, то есть время, прошедшее между появлением соседних захваченных пакетов. Как быстро получить в Wireshark эти сведения?
#. Как в Wireshark просмотреть, представление интересующего поля протокола в содержимом пакета (в виде байт)? Продемонстрируйте на примере.
#. Как в Wireshark определить, к какому полю и какого протокола относится произвольбый байт в содержимом пакета? Продемонстрируйте на примере.
#. Как в Wireshark, имея захваченный трафик, найти IP-адреса всех участников и отфильтровать только пакеты, связанные с определенным адресом?
#. Как в Wireshark, имея захваченный трафик, найти все сеансы TCP в нем и отфильтровать только пакеты, участвующие в одном из них?
#. Администратору известно, что в трафике его сервера в основном HTTP, некоторый объем DNS и на порядок меньше ICMP, чем DNS. Как в Wireshark, захватив этот трафик, быстро проверить, что соотношения протоколов в норме?
#. Требуется проанализировать запись трафика, содержащую начало DDoS-атаки, при которой трафика внезапно стало на порядок больше нормы. Как в Wireshark быстро найти момент начала атаки? (Запись начинается раньше.)
#. Администратору известно, что в нормальном трафике размеры пакетов в основном менее 400 байт, хотя иногда встречаются и больше (до 1500 байт). При конкретной атаке направляется много пакетов длиной около 1000 байт. Как в Wireshark быстро проверить, была ли атака за время записи?
#. В каких случаях имеет смысл сохранять захваченные пакеты в *.pcap
,
а в каких — в .pcapng
? Что делать, если нужен файл *.pcap
,
а имеется *.pcapng
?
- Введение в Wireshark (англ.), похожее на этот документ.
- Статья «Wireshark — приручение акулы» проекта LinkMeUp.
- Wireshark: краткое руководство — отдельное пособие по Wireshark прошлых лет, для новой версии и с иллюстрациями.