Команда netstat

Команда netstat позволяет использовать утилиту с соответствующим именем для вывода информации об активных сетевых соединениях. Данная утилита может оказаться полезной для выявления вредоносной активности в системе, отладки взаимодействующего с сетью программного обеспечения, а также тонкой настройки сетевых соединений.

Базовый синтаксис команды выглядит следующим образом:

$ netstat [параметры]

Утилита поддерживает множество параметров, позволяющих влиять на объем выводимых данных. В случае использования без параметров, утилита выведет список всех активных сетевых соединений по протоколам TCP и UDP, а также список активных сокетов домена UNIX. Если вам нужен лишь список соединений по протоколу TCP, вы можете использовать параметр --tcp, по протоколу UDP — параметр --udp, сокетов домена UNIX — параметр --unix. По умолчанию утилита выводит лишь список установленных соединений; если вам нужно получить информацию о принимающих соединения сокетах, вы можете использовать либо параметр --listening для получения списка слушающих соединения сокетов, либо параметр --all для получения списка как слушающих, так и передающих данные сокетов. Также полезно использовать параметр --programs для вывода идентификаторов процессов, которым принадлежит каждый из сокетов. Для отказа от разрешения имен узлов предназначен параметр --numeric. Также утилита поддерживает режим непрерывного вывода (по аналогии с утилитой top), активируемый с помощью параметра --continous. Дополнительными функциями утилиты являются вывод таблицы маршрутизации, активируемый с помощью параметра --route, вывод таблицы интерфейсов, активируемый с помощью параметра --interfaces, вывод информации о членстве в мультикаст-группах, активируемый с помощью параметра --groups, а также вывод статистики использования низкоуровневых сетевых протоколов, активируемый с помощью параметра --statistics.

Установка утилиты

Рассматриваемая утилита может не поставляться в составе вашего дистрибутива — в этом случае вам придется установить ее самостоятельно; проще всего это сделать с помощью терминала путем исполнения соответствующей вашему дистрибутиву команды.

Команда для Linux Mint, Ubuntu, Debian и Bodhi Linux:

# apt install net-tools

Команда для Fedora Workstation:

# dnf install net-tools

Примеры использования

Вывод списка сетевых соединений

Для вывода списка активных сетевых соединений следует использовать утилиту без каких-либо параметров.

$ netstat
Активные соединения с интернетом (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp        0      0 selestine:57280         bs.yandex.ru:https      ESTABLISHED
tcp        0    534 selestine:57558         lg-in-f198.1e100.:https FIN_WAIT1
tcp        0    518 selestine:46810         lg-in-f198.1e100.:https FIN_WAIT1
tcp        0      0 selestine:45798         bs.yandex.ru:https      ESTABLISHED
tcp        0      0 selestine:57486         bs.yandex.ru:https      ESTABLISHED
tcp        0    517 selestine:48620         lg-in-f198.1e100.:https ESTABLISHED
tcp        0    566 selestine:35526         lg-in-f198.1e100.:https FIN_WAIT1
tcp        0      0 selestine:39830         yandex.ru:https         ESTABLISHED
tcp        0    534 selestine:60268         lg-in-f198.1e100.:https FIN_WAIT1
tcp        0      0 selestine:38524         bs.yandex.ru:https      ESTABLISHED
udp        0      0 selestine:51223         dns.google:https        ESTABLISHED
udp        0      0 selestine:35147         79.133.85.144:https     ESTABLISHED

Утилита выводит длинную таблицу со списком активных сетевых соединений. В столбце Proto выводится название протокола, в столбце Recv-Q — количество принятых пакетов, в столбце Send-Q — количество отправленных пакетов, в столбце Local Address — сетевой адрес и порт локальной системы, в столбце Foreign Address — сетевой адрес и порт удаленной системы, в столбце STATE — состояние соединения.

Если нужно получить список принимающих соединения сокетов, вы можете использовать параметр --all:

$ netstat --all
Активные соединения с интернетом (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp        0      0 0.0.0.0:8200            0.0.0.0:*               LISTEN
tcp        0      0 _localdnsproxy:domain   0.0.0.0:*               LISTEN
tcp        0      0 _localdnsstub:domain    0.0.0.0:*               LISTEN
tcp        0      0 localhost:ipp           0.0.0.0:*               LISTEN
tcp        0    598 selestine:54290         lg-in-f198.1e100.:https FIN_WAIT1
tcp        0      0 selestine:57280         bs.yandex.ru:https      ESTABLISHED
tcp        0    517 selestine:36760         lg-in-f198.1e100.:https ESTABLISHED
tcp        0    597 selestine:36720         lg-in-f198.1e100.:https ESTABLISHED
tcp        0    518 selestine:54316         lg-in-f198.1e100.:https FIN_WAIT1

Состояние LISTEN указывает на то, что сокет принимает соединения.

Для вывода идентификаторов процессов, владеющих сокетами, следует использовать параметр --programs:

$ netstat --all --programs
(Не все процессы были идентифицированы, информация о процессах без владельца
не будет отображена, вам нужны права суперпользователя (root), чтобы увидеть всю информацию.)
Активные соединения с интернетом (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp        0      0 0.0.0.0:8200            0.0.0.0:*               LISTEN      -
tcp        0      0 _localdnsproxy:domain   0.0.0.0:*               LISTEN      -
tcp        0      0 _localdnsstub:domain    0.0.0.0:*               LISTEN      -
tcp        0      0 localhost:ipp           0.0.0.0:*               LISTEN      -
tcp        0      0 selestine:59888         le-in-f138.1e100.:https ESTABLISHED 4803/brave --type=u
tcp        0    566 selestine:41892         lf-in-f198.1e100.:https FIN_WAIT1   -
tcp        0      0 selestine:60744         152.35.111.34.bc.:https ESTABLISHED 4803/brave --type=u

В последнем столбце PID/Program name приводятся идентификаторы процессов и имена соответствующих исполняемых файлов с параметрами. Как сообщает сама утилита, для получения полной информации необходимы права суперпользователя.

Для отказа от разрешения имен узлов может использоваться параметр --numeric:

$ netstat --all --numeric
Активные соединения с интернетом (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp        0      0 0.0.0.0:8200            0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.54:53           0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN
tcp        0      0 192.168.1.175:60744     34.111.35.152:443       TIME_WAIT
tcp        0    598 192.168.1.175:56462     64.233.165.198:443      FIN_WAIT1
tcp        0      0 192.168.1.175:57280     213.180.204.90:443      ESTABLISHED

Очевидно, что в выводе имеются лишь IP-адреса. Этот вывод менее информативен, но генерируется гораздо быстрее.

Вывод таблицы маршрутизации

Для вывода таблицы маршрутизации может использоваться параметр --route:

$ netstat --route
Таблица маршутизации ядра протокола IP
Destination Gateway Genmask Flags MSS Window irtt Iface
default         _gateway        0.0.0.0         UG        0 0         0 enp5s0
link-local      0.0.0.0         255.255.0.0     U         0 0         0 enp5s0
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0         0 enp5s0

Вывод аналогичен выводу утилиты route.

Вывод списка сетевых интерфейсов

Для вывода списка сетевых интерфейсов может использоваться параметр --interfaces:

$ netstat --interfaces
Таблица интерфейсов ядра
Iface             MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
enp4s0           1500        0      0      0 0             0      0      0      0 BMU
enp5s0           1500   913888      0      4 0        176575      0      0      0 BMRU
lo              65536     1404      0      0 0          1404      0      0      0 LRU

В таблице присутствуют имена сетевых интерфейсов, значения MTU, а также количество принятых, отправленных, ошибочных, отброшенных и потерянных пакетов.

Вывод статистики использования сетевых соединений

Для вывода статистики использования сетевых соединений может использоваться параметр --statistics:

$ netstat --statistics
Ip:
    Forwarding: 2
    962882 total packets received
    1 with invalid addresses
    0 forwarded
    0 incoming packets discarded
    962855 incoming packets delivered
    185817 requests sent out
    20 outgoing packets dropped
    36 reassemblies required
    12 packets reassembled ok
Icmp:
    46 ICMP messages received
    0 input ICMP message failed
    Гистограмма входа ICMP
        destination unreachable: 46
    47 ICMP messages sent
    0 ICMP messages failed
    Гистограмма выхода ICMP
        destination unreachable: 47
IcmpMsg:
        InType3: 46
        OutType3: 47
Tcp:
    1837 active connection openings
    0 passive connection openings
    39 failed connection attempts
    490 connection resets received
    2 connections established
    47869 segments received
    43729 segments sent out
    4264 segments retransmitted
    1 bad segments received
    1193 resets sent
Udp:
    910727 packets received
    47 packets to unknown port received
    125 packet receive errors
    138390 packets sent
    125 receive buffer errors
    0 send buffer errors
    IgnoredMulti: 4282

Вывод содержит информацию о функционировании низкоуровневых сетевых протоколов.