Проверка с помощью netstat
Далее я рассмотрю полезный инструмент для проверки вашей сетевой конфигурации и активности. Он называется netstat и, фактически, является набором из нескольких инструментов, объединенных вместе. Мы будем обсуждать каждую из его функций в следующих секциях.
Отображение таблицы маршрутизации
При вызове netstat с -r флагом, он показывает таблицу маршрутизации. На выводе, он выдаст:
# netstat -nr
Kernel routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
127.0.0.1 * 255.255.255.255 UH 1 0 50 lo
191.72.1.0 * 255.255.255.0 U 1 0 478 eth0
191.72.2.0 191.72.1.1 255.255.255.0 UGN 1 0 250 eth0
Опция -n заставляет netstat печатать адреса в виде IP-номеров в формате dotted quad, вместо символических имен хостов и сетей. Это особенно полезно, когда вы хотите избежать поиска адреса по сети, например, через DNS или NIS сервер. Вторая колонка вывода netstat показывает шлюз маршрута. Если шлюз не используется, отображается звездочка. Третья колонка — это маска маршрута. Когда задается IP-адрес, чтобы найти подходящий маршрут для него, ядро просматривает все записи таблицы маршрутизации, применяет к адресу побитовое И с маской и затем сравнивает результат с целью маршрута.
Четвертая колонка показывает различные флаги, которые описывают маршрут:
- G - маршрут использует шлюз.
- U - интерфейс, который нужно использовать, работает.
- H - только отдельный хост может быть достигнут через данный маршрут. Например, для записи loopback 127.0.0.1.
- D - устанавливается, если запись таблицы была создана при получении ICMP-перенаправления (см. секцию 3.5).
- M - устанавливается, если запись таблицы была изменена ICMP-перенаправлением.
- Ref - колонка показывает число ссылок на этот маршрут, то есть сколько других маршрутов (например, через шлюзы) опирается на наличие этого маршрута. Последние две колонки показывают время, в течение которого используется запись маршрутизации, и интерфейс, через который отправляются датаграммы.
Отображение статистики интерфейса
При вызове netstat с флагом -i, программа показывает статистику для сетевых интерфейсов. Если, кроме того, указана опция -a, она будет выводить информацию обо всех интерфейсах, представленных в ядре, а не только о тех, которые были настроены на данный момент. Вывод от netstat будет выглядеть следующим образом:
$ netstat -i
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flags
lo 0 0 3185 0 0 0 3185 0 0 0 BLRU
eth0 1500 0 972633 17 20 120 628711 217 0 0 BRU
Поля MTU и Met показывают текущий MTU и метрическое значение для данного интерфейса. Колонки RX и TX отображают, сколько пакетов было получено или передано без ошибок (RX-OK/TX-OK), сколько из них было повреждено (RX-ERR/TX-ERR), потеряно (RX-DRP/TX-DRP) и сколько было утеряно из-за переполнения (RX-OVR/TX-OVR). Последняя колонка отражает флаги, установленные для этого интерфейса. Здесь используется укороченная версия флагов, которую выводит команда ifconfig.
- B - установлен широковещательный адрес.
- L - этот интерфейс представляет собой loopback устройство.
- M - интерфейс получает все пакеты (в режиме promiscuous).
- N - трейлеры избегаются.
- O - ARP выключен для этого интерфейса.
- P - это point-to-point соединение.
- R - интерфейс работает.
- U - интерфейс активен.
Отображение соединений
Netstat предоставляет множество опций для отображения активных и пассивных сокетов. Опции -t, -u, -w, и -x позволяют просмотреть активные сокеты для TCP, UDP, RAW или UNIX соответственно. При использовании флага -a также будут показаны сокеты, которые находятся в режиме ожидания соединения. Это позволяет увидеть список всех серверов, которые в данный момент активны в вашей системе.
$ netstat -ta
Active Internet connections Proto Recv-Q Send-Q Local Address Foreign Address (State)
tcp 0 0 *:domain *:* LISTEN
tcp 0 0 *:time *:* LISTEN
tcp 0 0 *:smtp *:* LISTEN
tcp 0 0 vlager:smtp vstout:1040 ESTABLISHED
tcp 0 0 *:telnet *:* LISTEN
tcp 0 0 localhost:1046 vbardolino:telnet ESTABLISHED
tcp 0 0 *:chargen *:* LISTEN
tcp 0 0 *:daytime *:* LISTEN
tcp 0 0 *:discard *:* LISTEN
tcp 0 0 *:echo *:* LISTEN
tcp 0 0 *:shell *:* LISTEN
tcp 0 0 *:login *:* LISTEN
Из вывода видно, что большинство серверов находятся в режиме ожидания соединения. Однако, четвёртая строка указывает на SMTP-соединение с vstout, а шестая — на telnet-соединение с vbardolino. При использовании флага -a будут отображаться все сокеты всех семейств.