Команда 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
…
Вывод содержит информацию о функционировании низкоуровневых сетевых протоколов.