Product SiteDocumentation Site

10.8. Инструменты Диагностики Сети

Когда какое-либо сетевое приложение не работает как ожидалось, очень важно вникнуть в суть дела и разобраться почему это происходит. И даже в случаях видимости нормальной работы, без сбоев, очень важно дополнительно получить подтверждение этого от сетевых диагностических средств. Для решения данных вопросов существует несколько диагностических инструментов; при этом каждый из этих инстументов работает на своём (разном) уровне.

10.8.1. Диагностика локального узла: netstat

Давайте сначала рассмотрим команду netstat (в пакете net-tools package); она показывает мгновенный срез суммарной информации о сетевой активности данной машины. Запущенная без параметров, программа показывает все открытые соединения; этот перечень может быть очень подробный, поскольку он включает в себя много сокетов Unix-домена (широко используемые демоны), которые не связаны с сетью вообще (например, соединение dbus, трафик X11, и соединения между виртуальными файловыми системами и рабочего стола).
Поэтому наиболее распространено применение команды netstat с параметрами, которые изменяют поведение программы. Наиболее часто используются следующие параметры:
  • -t, отфильтровывает результат и показывает только соединения TCP;
  • -u, которая работает также, только для соединений UDP; эти параметры не являются взаимоисключающими, и одного из них достаточно, чтобы остановить отображение части Unix-домен соединений);
  • -a, также перечисляет прослушиваемые сокеты (ожидающие входящие соединения);
  • -n, отображает результат в цифровом (небуквенном) виде: адреса IP (а не DNS разрешение), номер порта (а не псевдонимы, как определено в файле /etc/services) и идентификаторы пользователей (ids, а не имя учётной записи пользователя);
  • -p, перечисляет уже запущенные на данной машине процессы; этот параметр будет более полезен при запуске netstat от лица суперпользователя, поскольку обычные пользователи увидят только те процессы, которые они сами запустили;
  • -c, непрерывно обновлять перечень подключений.
Другие параметры, описанные в страницах руководства netstat(8), позволяют более тонко настроить отображаемый программой результат. На практике, первые пять параметров (описываемые чуть выше) настолько часто используются вместе, что системные и сетевые администраторы практически рефлексивно используют netstat -tupan в своей работе. На несильно загруженной машине, типичный результат вывода команды будет выглядеть следующим образом:
# netstat -tupan
Активные соединения Интернет (сервера и общепринятые)
Прото Полv-Q Посл-Q Локальный Адрес         Внешний Адрес         Состояние    PID/Имя программы
tcp        0      0 0.0.0.0:111             0.0.0.0:*             СЛУШАЕТ      397/rpcbind     
tcp        0      0 0.0.0.0:22              0.0.0.0:*             СЛУШАЕТ      431/sshd        
tcp        0      0 0.0.0.0:36568           0.0.0.0:*             СЛУШАЕТ      407/rpc.statd   
tcp        0      0 127.0.0.1:25            0.0.0.0:*             СЛУШАЕТ      762/exim4       
tcp        0    272 192.168.1.242:22        192.168.1.129:44452   ОБЩЕПРИНЯТЫЕ 1172/sshd: roland [
tcp6       0      0 :::111                  :::*                  СЛУШАЕТ      397/rpcbind     
tcp6       0      0 :::22                   :::*                  СЛУШАЕТ      431/sshd        
tcp6       0      0 ::1:25                  :::*                  СЛУШАЕТ      762/exim4       
tcp6       0      0 :::35210                :::*                  СЛУШАЕТ      407/rpc.statd   
udp        0      0 0.0.0.0:39376           0.0.0.0:*                          916/dhclient    
udp        0      0 0.0.0.0:996             0.0.0.0:*                          397/rpcbind     
udp        0      0 127.0.0.1:1007          0.0.0.0:*                          407/rpc.statd   
udp        0      0 0.0.0.0:68              0.0.0.0:*                          916/dhclient    
udp        0      0 0.0.0.0:48720           0.0.0.0:*                          451/avahi-daemon: r
udp        0      0 0.0.0.0:111             0.0.0.0:*                          397/rpcbind     
udp        0      0 192.168.1.242:123       0.0.0.0:*                          539/ntpd        
udp        0      0 127.0.0.1:123           0.0.0.0:*                          539/ntpd        
udp        0      0 0.0.0.0:123             0.0.0.0:*                          539/ntpd        
udp        0      0 0.0.0.0:5353            0.0.0.0:*                          451/avahi-daemon: r
udp        0      0 0.0.0.0:39172           0.0.0.0:*                          407/rpc.statd   
udp6       0      0 :::996                  :::*                               397/rpcbind     
udp6       0      0 :::34277                :::*                               407/rpc.statd   
udp6       0      0 :::54852                :::*                               916/dhclient    
udp6       0      0 :::111                  :::*                               397/rpcbind     
udp6       0      0 :::38007                :::*                               451/avahi-daemon: r
udp6       0      0 fe80::5054:ff:fe99::123 :::*                               539/ntpd        
udp6       0      0 2001:bc8:3a7e:210:a:123 :::*                               539/ntpd        
udp6       0      0 2001:bc8:3a7e:210:5:123 :::*                               539/ntpd        
udp6       0      0 ::1:123                 :::*                               539/ntpd        
udp6       0      0 :::123                  :::*                               539/ntpd        
udp6       0      0 :::5353                 :::*                               451/avahi-daemon: r
Как и ожидалось, перечисляются установленные соединения, два соединения SSH в этом случае, и приложения, ожидающие входящие соединения (перечислены как СЛУШАЕТ - "LISTEN"), в частности почтовый сервер Exim4 прослушивает порт 25.

10.8.2. Удалённая диагностика: nmap

Команда nmap (в пакете с похожим именем) выполняет те же функции, что и netstat, только для удалённого диагностирования машин. Она может просканировать все "широко известные" порты на одном или на нескольких удалённых серверах, и перечислить порты, на которых приложения готовы дать ответ входящим соединениям. Кроме того, nmap имеет возможность определить некоторые из тех приложений, иногда даже и их номер версии. Недостатком данного инструмента является то, что поскольку он работает удалённо, то не может предоставить информацию о процессах или пользователях; однако, он может работать по нескольким целям одновременно.
Типичный вызов программы выглядит следующим образом: nmap и далее параметр -A (таким образом nmap пытается определить версию програмного обеспечения найденного сервера), а следом указываются один или более адресов IP или имён DNS машин для сканирования. Кроме этого, ещё много других параметров существует для тонкой настройки поведения программы nmap; пожалуйста руководствуйтесь документацией, размещённой в страницах руководства - nmap(1).
# nmap mirtuel

Запуск Nmap 6.47 ( http://nmap.org ) at 2015-03-09 16:46 CET
Отчёт о сканировании nmap для mirtuel (192.168.1.242)
Хост запущен (0.000013s задержка).
Записи rDNS для 192.168.1.242: mirtuel.internal.placard.fr.eu.org
Не показаны: 998 закрытых порта
ПОРТ    СОСТОЯНИЕ СЕРВИС
22/tcp  open      ssh
111/tcp open      rpcbind

Nmap завершила работу : 1 адрес IP (1 хост запущен) просканирован за 2.41 секунды
# nmap -A localhost

Запуск Nmap 6.47 ( http://nmap.org ) at 2015-03-09 16:46 CET
Отчёт о сканировании nmap для локального хоста (127.0.0.1)
Хост запущен (0.000013s задержки).
Другие адреса для локального хоста (не сканированы): 127.0.0.1
Не показаны: 997 закрытых портов
ПОРТ    СОСТОЯНИЕ СЕРВИС ВЕРСИЯ
22/tcp  открыт    ssh    OpenSSH 6.7p1 Debian 3 (протокол 2.0)
|_ssh-hostkey: ОШИБКА: Сценарий закончился с ошибкой (используйте -d для отладки)
25/tcp  открыт    smtp   Exim smtpd 4.84
| smtp-commands: mirtuel Привет хост [127.0.0.1], РАЗМЕР 52428800, 8BITMIME, PIPELINING, HELP, 
|_ Поддерживаемые команды: AUTH HELO EHLO MAIL RCPT DATA NOOP QUIT RSET HELP 
111/tcp открыт    rpcbind 2-4 (RPC #100000)
| rpcinfo: 
|   програма версия   порт/протокол  сервис
|   100000   2,3,4     111/tcp       rpcbind
|   100000   2,3,4     111/udp       rpcbind
|   100024   1       36568/tcp       status
|_  100024   1       39172/udp       status
Тип устройства: общего назначения
Запущено: Linux 3.X
OS CPE: cpe:/o:linux:linux_kernel:3
OS детали: Linux 3.7 - 3.15
Расстояние по Сети: 0 hops
Информация о запущенных сервисах: Хост: mirtuel; OS: Linux; CPE: cpe:/o:linux:linux_kernel

Определение OS and Сервисов выполнено. Пожалуйста отправьте нам сообщение о любых неверных результатах по адресу - http://nmap.org/submit/ .
Nmap завершил работу: 1 адрес IP (1 хост запущен) сканирование выполнено за 11.54 секунд
Как и ожидалось, приложения SSH и Exim4 слушают. Запомните, что не все приложения слушают на всех адресах IP. Пример: поскольку имеется возможность запустить Exim4 только на закольцованном интерфейсе lo, то эта программа появится в перечне в случае анализа локального хоста localhost, а не когда прослушивается mirtuel (это буквенное имя соответствует интерфейсу eth0 на той же машине).

10.8.3. Снифферы (перехватчики пакетов и анализаторы кадров): tcpdump and wireshark

Иногда, необходимо посмотреть, что фактически происходит в сети, пакет за пакетом. В таких случаях вызываются “анализаторы кадров”, более широко известные под именем сниффер. Такие инструменты просматривают все пакеты, проходящие по указанному сетевому интерфейсу, и отображают их в удобном для пользователя виде.
Давним и хорошо зарекомендовавшим себя инструментом в этой области является программа tcpdump, доступная как стандартный инструмент для большого количества разнообразных платформ. Она позволяет использовать многие разновидности перехвата трафика в сети, но представление этого трафика (для просмотра) остаётся довольно непонятным. Поэтому мы не будем в деталях описывать её далее.
Более поздним (и более современным) инструментом является программа wireshark (в пакете wireshark), которая в настоящее время более рекомендуется для перехвата сетевого трафика из-за его многочисленных декодирующих модулей, что позволяет упростить сам процесс последующего анализа перехваченных пакетов. Отображение перехватываемых пакетов выполняется графически с организацией просмотра по принципу слоёв протокола. Это позволяет пользователю отчётливо представить себе (видеть глазами) все протоколы, используемые в пакете. Для примера, пакет, содержащий запрос HTTP, wireshark отобразит отдельно: информацию касающуюся физического слоя, слой Ethernet, информацию о пакете IP, параметры соединения TCP, и наконец сам запрос HTTP.
Анализатор сетевого трафика wireshark

Рисунок 10.1. Анализатор сетевого трафика wireshark

В нашем примере, пакеты перемещающиеся по протоколу SSH отфильтрованы (с фильтром !tcp.port == 22). Показываемый выделением пакет на картинке, был разработан на уровне HTTP.