Product SiteDocumentation Site

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

When a network application does not run as expected, it is important to be able to look under the hood. Even when everything seems to run smoothly, running a network diagnosis can help ensure everything is working as it should. Several diagnosis tools exists for this purpose; each one operates on a different level. It would go beyond the scope of this book to discuss all tools, so we will focus on the more well-known and commonly used tools in the following sections.

10.9.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.9.2. Удалённая диагностика: nmap

Команда nmap (в пакете с похожим именем) выполняет те же функции, что и netstat, только для удалённого диагностирования машин. Она может просканировать все "широко известные" порты на одном или на нескольких удалённых серверах, и перечислить порты, на которых приложения готовы дать ответ входящим соединениям. Кроме того, nmap имеет возможность определить некоторые из тех приложений, иногда даже и их номер версии. Недостатком данного инструмента является то, что поскольку он работает удалённо, то не может предоставить информацию о процессах или пользователях; однако, он может работать по нескольким целям одновременно.
Типичный вызов программы выглядит следующим образом: nmap и далее параметр -A (таким образом nmap пытается определить версию програмного обеспечения найденного сервера), а следом указываются один или более адресов IP или имён DNS машин для сканирования. Кроме этого, ещё много других параметров существует для тонкой настройки поведения программы nmap; пожалуйста руководствуйтесь документацией, размещённой в страницах руководства - nmap(1).
# nmap debian
Starting Nmap 7.80 ( https://nmap.org ) at 2022-02-22 20:58 CET
Nmap scan report for debian (192.168.122.57)
Host is up (0.000087s latency).
Not shown: 996 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
79/tcp  open  finger
80/tcp  open  http
113/tcp open  ident

Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds
# nmap -A localhost
nmap -A localhost
Starting Nmap 7.80 ( https://nmap.org ) at 2022-02-22 20:56 CET
Stats: 0:01:16 elapsed; 0 hosts completed (1 up), 1 undergoing Service Scan
Service scan Timing: About 83.33% done; ETC: 20:57 (0:00:15 remaining)
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000086s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 994 closed ports
PORT    STATE SERVICE VERSION
22/tcp  open  ssh     OpenSSH 8.4p1 Debian 5 (protocol 2.0)
|_auth-owners: foobar
25/tcp  open  smtp    Postfix smtpd
|_auth-owners: foobar
|_smtp-commands: debian, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN, SMTPUTF8, CHUNKING, 
| ssl-cert: Subject: commonName=debian
| Subject Alternative Name: DNS:debian
| Not valid before: 2022-02-22T14:48:42
|_Not valid after:  2032-02-20T14:48:42
|_ssl-date: TLS randomness does not represent time
79/tcp  open  finger?
|_auth-owners: foobar
|_finger: ERROR: Script execution failed (use -d to debug)
80/tcp  open  http    Apache httpd 2.4.52 ((Debian))
|_auth-owners: foobar
|_http-server-header: Apache/2.4.52 (Debian)
|_http-title: Apache2 Debian Default Page: It works
113/tcp open  ident   Liedentd (Claimed user: foobar)
|_auth-owners: foobar
631/tcp open  ipp     CUPS 2.3
|_auth-owners: foobar
| http-robots.txt: 1 disallowed entry 
|_/
|_http-server-header: CUPS/2.3 IPP/2.1
|_http-title: Home - CUPS 2.3.3op2
Service Info: Host:  debian; OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 87.91 seconds
As expected, e.g. the SSH, Apache and Postfix applications are listed. Note that not all applications listen on all IP addresses; since Postfix is only accessible on the lo loopback interface, it only appears during an analysis of localhost and not when scanning debian (which maps to the enp1s0 interface on the same machine).

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

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

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

In our example, the packets traveling over SSH are filtered out (with the !tcp.port == 22 filter). The packet currently displayed was developed at the transport layer of the SSHv2 protocol.