Утилита netstat
Об утилите
Эта утилита используется для вывода информации о сетевых подключениях. Также она может показать таблицы маршрутизации, статистику по интерфейсам и другое. Эта утилита считается устаревшей и была заменена на утилиту ss, которую я рассмотрю в следующей статье. Получить справку об этой утилите можно
здесь
.
Утилита netstat входит в пакет net-tools. В этот же пакет также включены следующие инструменты: arp, ifconfig, rarp, nameif и route. Все они считаются устаревшими, но иногда используются по привычке. И так, чтобы установить net-tools выполните:
$ sudo apt install net-tools
Работа утилиты
Если мы выполним netstat без дополнительных опций, то увидим активные сетевые соединения (Active Internet connections) и активные соединения с помощью сокетов (Active UNIX domain sockets).
$ netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 216 192.168.0.35:ssh pc-adm:64743 ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ] DGRAM 799 /run/user/1000/systemd/notify
unix 3 [ ] DGRAM 11402 /run/systemd/notify
unix 2 [ ] DGRAM 11418 /run/systemd/journal/syslog
unix 7 [ ] DGRAM 11424 /run/systemd/journal/dev-log
unix 7 [ ] DGRAM 11426 /run/systemd/journal/socket
unix 3 [ ] STREAM CONNECTED 12270 /run/systemd/journal/stdout
***
Выводимая информация для интернет соединений и соединений с помощью сокетов отличается.
Выводимые поля для интернет соединений:
- Proto — протокол (tcp, udp).
- Recv-Q — количество байтов, помещённых в буфер приёма TCP/IP, но не переданных приложению. Если это число высокое, то нужно проверить работоспособность приложения, которое работает с данным портом.
- Send-Q — количество байтов, помещённых в буфер отправки TCP/IP, но не отправленных, или отправленных, но не подтверждённых. Высокое значение может быть связано с перегрузкой сети сервера.
- Local Address — локальный адрес сервера. В обычных соединения, это адрес сервера на который пришло соединение. В прослушиваемых портах (LISTEN) — это диапазон адресов. Так 0.0.0.0:port — значит подключаться можно ко всем адресам сервера, а 192.168.0.35:port — значит подключаться можно только к этому адресу сервера.
- Foreign Address — адрес второй стороны. В обычных соединения, это адрес с которого пришло соединение. В прослушиваемых портах (LISTEN) — это диапазон адресов. Так 0.0.0.0:* — значит подключаться можно с любых адресов и с любых портов, а например 192.168.0.50:* — значит подключаться можно только с этого адреса и с любых портов.
- State — состояние подключения, или прослушивания.
Выводимые поля для соединений с помощью сокетов:
Proto — протокол (unix);
RefCnt — счётчик подключенных к этому сокету процессов;
Flags — флаги, я их не буду рассматривать;
Type — тип сокета
- DGRAM — работает без установки соединения;
- STREAM — с предварительной установкой соединения;
State — состояние коннекта
LISTENING — сокет ожидает запроса на подключение;
CONNECTED — сокет подключен;
DISCONNECTING — сокет отключен;
(пусто) — сокет не подключен к другому.
I-Node — номер i-node файла сокета;
Path — путь к файлу сокета.
Примеры работы и дополнительные опции
Активные подключения и прослушиваемые порты
Если утилита netstat без опций выводила все активные подключения, то с опцией -a она дополнительно выведет все прослушиваемые порты.
Дополнительно можно отфильтровать информацию по типу протокола:
-t— выводить только tcp;-u— выводить только udp;-x— выводить только сокеты.
Эти опции можно совмещать, например следующая команда покажет все активные подключения и прослушиваемые порты только для tcp и udp соединений:
$ netstat -atu
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp 0 268 192.168.0.35:ssh pc-adm:64743 ESTABLISHED
tcp6 0 0 [::]:http [::]:* LISTEN
tcp6 0 0 [::]:ssh [::]:* LISTEN
tcp6 0 0 [::]:https [::]:* LISTEN
Из вывода выше мы видим что у нас есть tcp соединения и нет udp. В tcp соединениях видно одно в состоянии ESTABLISHED, это я подключен к серверу по протоколу ssh. Остальные имеют состояние LISTEN — это прослушиваемые порты. Наш сервер слушает следующие порты: ssh (22 порт), https (443 порт), http (80 порт).
Только прослушиваемые порты или сокеты
Перечислить все прослушиваемые порты, в том числе и сокеты можно с помощью опции -l. Здесь вы также можете ограничить вывод tcp, udp или linux сокетами.
Например, следующая команда выведет все прослушиваемые порты и сокеты, так как я не ограничиваю вывод определённым протоколом:
$ netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp6 0 0 [::]:http [::]:* LISTEN
tcp6 0 0 [::]:ssh [::]:* LISTEN
tcp6 0 0 [::]:https [::]:* LISTEN
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 211 /run/systemd/journal/io.systemd.journal
unix 2 [ ACC ] STREAM LISTENING 802 /run/user/1000/systemd/private
unix 2 [ ACC ] STREAM LISTENING 811 /run/user/1000/gnupg/S.dirmngr
unix 2 [ ACC ] STREAM LISTENING 813 /run/user/1000/gnupg/S.gpg-agent.browser
unix 2 [ ACC ] STREAM LISTENING 815 /run/user/1000/gnupg/S.gpg-agent.extra
unix 2 [ ACC ] STREAM LISTENING 817 /run/user/1000/gnupg/S.gpg-agent.ssh
unix 2 [ ACC ] STREAM LISTENING 819 /run/user/1000/gnupg/S.gpg-agent
unix 2 [ ACC ] STREAM LISTENING 11882 /run/dbus/system_bus_socket
unix 2 [ ACC ] STREAM LISTENING 11405 /run/systemd/private
unix 2 [ ACC ] STREAM LISTENING 11407 /run/systemd/userdb/io.systemd.DynamicUser
unix 2 [ ACC ] STREAM LISTENING 11408 /run/systemd/io.system.ManagedOOM
unix 2 [ ACC ] STREAM LISTENING 11420 /run/systemd/fsck.progress
unix 2 [ ACC ] STREAM LISTENING 11428 /run/systemd/journal/stdout
unix 2 [ ACC ] SEQPACKET LISTENING 11430 /run/udev/control
Получение статистики
Для получения статистики по сетевым протоколам нужно использовать опцию -s. Здесь также можно ограничивать вывод по определённым протоколам, но нельзя использовать опцию -x.
Например следующая команда выведет статистику по протоколу udp:
$ netstat -su
Udp:
314 packets received
0 packets to unknown port received
0 packet receive errors
317 packets sent
0 receive buffer errors
0 send buffer errors
IgnoredMulti: 3856905
UdpLite:
IpExt:
InBcastPkts: 3856905
InOctets: 424191584
OutOctets: 6605615
InBcastOctets: 229159529
InNoECTPkts: 4157300
InECT0Pkts: 10507
Формат вывода
Утилита netstat, используя dns, пытается присвоить имена ip-адресам. Так, какой-нибудь, условный компьютер, с адресом 192.168.0.14 будет назван как pc-adm. Мы можем выключить такое именование хостов используя опцию -n.
А ещё утилита netstat именует стандартные порты в имена протоколов, например порт 22 будет назван ssh, 80 — http, 443 — https. Но мы можем выключить это поведение используя опцию -nn.
Также эта утилита умеет выводить имена процессов, которые обслуживают подключения, или слушают порты. Для этого нужно использовать опцию -p. Но чтобы мы увидели названия процессов, нужно запускать утилиту netstat используя sudo.
Например:
netstat -ltnnp— вывести только прослушиваемые tcp порты. При этом не переводить ip адреса в имена хостов и не переводить номера портов в названия протоколов. Дополнительно вывести название процессов.netstat -atunnp— вывести все порты (прослушиваемые и активные). При этом выводить только сетевые порты (tcp и udp), а не сокеты. Не переводить ip адреса в имена хостов и не переводить номера портов в имена протоколов. А также вывести названия процессов участвующих в соединениях.
Пример последней команды показан здесь:
$ sudo netstat -atnnp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 402/sshd: /usr/sbin
tcp 0 52 192.168.0.35:22 192.168.0.14:64743 ESTABLISHED 4121/sshd: alex [pr
tcp6 0 0 :::80 :::* LISTEN 403/apache2
tcp6 0 0 :::22 :::* LISTEN 402/sshd: /usr/sbin
tcp6 0 0 :::443 :::* LISTEN 403/apache2
Итог
Мы познакомились с утилитой netstat, которая позволяет посмотреть информацию о сетевых подключениях к серверу или от него.
Рассмотрели следующие опции:
-a— посмотреть все порты (прослушиваемые и используемые в подключении);-l— посмотреть только прослушиваемые порты;-t— выводить только tcp порты;-u— выводить только udp порты;-x— выводить информацию только по unix сокетам;-p— к выводу добавить информацию о процессе (имя и pid процесса);-n— отключить преобразование ip адреса в имя компьютера;-nn— отключить преобразование номера порта в имя протокола;-s— отобразить статистику по различным сетевым протоколам.
Если понравилась статья, подпишись на мой канал в VK или Telegram .