Netstat

netstatкомандная строка для вывода статистики сетевых подключений, таблиц маршрутизации, а также различной информации о сетевых интерфейсах (сетевой интерфейсный контроллер или виртуальный сетевой интерфейс) и статистике сетевых протоколов. Доступна в Unix, Plan 9, Inferno и других Unix-подобных операционных системах, включая macOS, Linux, Solaris и BSD. Также реализована в IBM OS/2 и в семействах Microsoft Windows NT, включая Windows XP, Windows Vista, Windows 7, Windows 8 и Windows 10.

Netstat применяется для поиска сетевых проблем и оценки объёма сетевого трафика как одного из способов измерения производительности[1]. В Linux данная программа в основном считается устаревшей, хотя по-прежнему входит в состав многих дистрибутивов.

В Linux netstat (пакет «net-tools») заменяется на ss (часть iproute2). Для команд netstat -r, netstat -i и netstat -g рекомендуются соответственно ip route, ip -s link и ip maddr[2].[3][4][5]

Общие сведения
netstat
Тип команда
Разработчики различные открытые и коммерческие программные разработчики
Написана на Plan 9: C
Операционные системы Unix, Unix-подобные, Plan 9, Inferno, OS/2, Microsoft Windows, ReactOS
Первый выпуск 1983
Аппаратная платформа кроссплатформенное
Лицензия OS/2, Windows: проприетарная коммерческая лицензия
net-tools, ReactOS: GPLv2
Plan 9: MIT License

Возможности

netstat предоставляет статистику для следующих данных:

  • Proto — имя протокола (TCP, UDP и др.). На некоторых системах к имени протокола может добавляться «4» или «6» в зависимости от работы через IPv4 или IPv6.
  • Local Address — IP-адрес локального компьютера и номер используемого порта. Если не указан параметр -n, отображается имя компьютера и имя порта. Звёздочка (*) вместо хоста означает прослушивание на всех интерфейсах. Если порт ещё не установлен, его номер также отображается как звёздочка.
  • Foreign Address — IP-адрес и номер порта удалённого компьютера, с которым установлено соединение. Если не указан параметр -n, выводятся имена. Порт, не установленный на удаленной стороне, тоже отображается как *.
  • State — статус TCP-соединения. Возможные состояния: CLOSE_WAIT, CLOSED, ESTABLISHED, FIN_WAIT_1, FIN_WAIT_2, LAST_ACK, LISTEN, SYN_RECEIVED, SYN_SEND, TIME_WAIT. Подробнее см. RFC 793.

Параметры

Параметры команды указываются с префиксом «-» (дефис), а не со слэшем «/». Некоторые параметры доступны не на всех платформах.

Имя Описание Windows ReactOS macOS BSD NetBSD FreeBSD Linux Solaris OS/2
-a Показывает все активные соединения и порты TCP и UDP, по которым ведётся прослушивание. Да Да Да Да Да Да
-b Показывает имя бинарного (исполняемого) файла, открывшего соединение или порт (Windows XP, Server 2003 и новее; не поддерживается в Windows 2000 и старее). Да Нет Нет
-b Для -i: отображает суммарное количество переданных байт. Нет Да Да Нет
-e Выводит статистику Ethernet: количество байт и пакетов, отправленных и полученных. Можно комбинировать с -s. Да Да Нет
-f Показывает полные доменные имена (FQDN) для удаленных адресов (только Windows Vista и новее). Да Нет Нет
-f <address family> Ограничивает вывод только выбранным семейством адресов: unix, inet, inet6. Нет Да Нет
-g Выводит информацию о членстве в многоадресных группах для IPv4 и IPv6 (доступно только в новых ОС). Нет Нет Да
-i Отображает сетевые интерфейсы и их статистику. Нет Нет Да Да Да Да Да
-m Показывает статистику использования памяти для сетевого кода (на Solaris — STREAMS). Нет Нет Да Да Да Да Да
-n Активные TCP-соединения, но адреса и порты выводятся только цифрами. Да Да Да Да Да Да Да Да
-o Выводит активные TCP-соединения с указанием идентификатора процесса (PID). Можно узнать приложение по PID на вкладке «Процессы» в диспетчере задач Windows. Можно использовать с -a, -n, -p. Появилось в Windows XP, Server 2003 и в Windows 2000 с обновлением[6]. Да Нет Нет
-p <protocol> Показывает соединения только заданного протокола (tcp, udp, tcpv6, udpv6). С -s можно выбрать tcp, udp, icmp, ip, tcpv6, udpv6, icmpv6, ipv6. Да Да Да Да Да Да
-p Показывает, какие процессы используют какие сокеты (аналогично -b в Windows, требуется root). Нет Нет Да
-P <protocol> Показывает соединения только заданного протокола (ip, ipv6, icmp, icmpv6, igmp, udp, tcp, rawip). Нет Нет Да
-r Показывает IP-маршрутизационную таблицу (эквивалентно «route print» в Windows). Да Да Да Да Да Да Да Да Да
-s Показывает статистику по протоколам. По умолчанию: TCP, UDP, ICMP и IP. При наличии IPv6 выводятся также протоколы семейства IPv6. -p уточняет набор протоколов. Да Да Да Да Да Да Да Да
-t Показывает только TCP-соединения. Нет Да Да
-u Показывает только UDP-соединения. Нет Нет Да Да
-W Широкий вывод — не обрезает имена хостов и IPv6-адреса. Нет Нет Да Нет
-x Выводит соединения, слушатели и общие точки для NetworkDirect. Да
-y Показывает шаблон TCP-соединения для всех соединений. Не совместим с другими опциями. Да
-v С -b: отображает последовательность компонентов, участвующих в создании соединения или порта. Да Нет Нет
Interval Периодически обновляет вывод с указанным интервалом в секундах. Для остановки — CTRL+C. Без параметра информация выводится один раз. Да Да Нет
-h Выводит справку в командной строке. Да Нет Да Да Да Да Да Да Нет
-? Выводит справку в командной строке. Да Нет Нет Нет Нет Нет Нет Нет Да
/? Выводит справку в командной строке. Да Да Нет Нет Нет Нет Нет Нет Нет

Примеры

Кроссплатформенные

В macOS, BSD, Linux и Microsoft Windows:

Для вывода статистики только для протоколов TCP или UDP:

netstat -sp tcp

netstat -sp udp

Unix-подобные системы

Чтобы отобразить все порты, открытые процессом с указанным PID:

netstat -aop | grep "pid"

Для непрерывного отображения открытых TCP и UDP-соединений в числовом виде и программ, их использующих (Linux):

netstat -nutpacw

Windows

Для отображения активных TCP-соединений и идентификаторов процессов каждые 5 секунд (только Windows NT и выше или Windows 2000 с патчем):

netstat -o 5

Для вывода активных TCP-соединений и идентификаторов процессов в числовом виде:

netstat -no

*nix

Команда Объяснение
netstat -a Показывает все сокеты, слушающие и не слушающие, по всем протоколам (TCP, UDP и др.)
netstat -at Показывает только TCP-соединения (опция -au — только UDP)
netstat -ant Все TCP-соединения, но без DNS-разрешения (только IP-адреса)
netstat -al Показывает только слушающие сокеты
netstat -aep Показывает PID и программу, которой принадлежит каждый сокет; e — дополнительная информация о пользователе. Для просмотра всех PID — запуск от root.
netstat -s Показывает сетевую статистику
netstat -r Серверная таблица маршрутизации (эквивалентен route -e)
netstat -i Таблица всех сетевых интерфейсов. Опция -e приближает вывод к ifconfig.
netstat -ct Непрерывный вывод TCP-соединений
netstat -g Информация о многоадресных группах (IPv4, IPv6)
netstat -lntu Показывает все службы, слушающие TCP и UDP, все открытые порты на локальной машине
grep ESTA Выводит все установленные («established») TCP-соединения

Подстановочные символы

В netstat звёздочка * означает «любое значение». Например:

Пример вывода:

....Local Address    Foreign Address    State
... *:smtp           *:*               LISTEN

В столбце «Local Address» *:smtp означает, что процесс слушает все сетевые интерфейсы машины на порту, соответствующем службе smtp (см. /etc/services для преобразования имён служб). Это может быть также показано как 0.0.0.0.

Первая * в *:* — соединения могут приходить с любого IP-адреса, вторая * — с любого порта на удалённой стороне.

Особенности реализации

Некоторые версии netstat не используют явных разделителей полей, из-за чего в числовом выводе значения могут сливаться, что приводит к ошибкам.

Особенности платформ

undefined
undefined

В Linux необработанные данные для обхода ошибок форматирования вывода netstat при просмотре интерфейсов (команда netstat -i) можно получить из файла /proc/net/dev.

В Microsoft Windows сведения netstat можно получить вызовом функций GetTcpTable и GetUdpTable из IP Helper API (IPHLPAPI.DLL). Возвращается информация о локальных и удалённых IP-адресах, портах и (для GetTcpTable) статус TCP-соединения. Помимо консольной версии netstat.exe существуют и графические утилиты с аналогичными возможностями.

В Windows netstat работает только если протокол Internet Protocol (TCP/IP) установлен как компонент для сетевого адаптера в свойствах подключения.

В среде Remote Desktop Services (ранее Terminal Services) netstat показывает только те соединения, которые открыты текущим пользователем, а не всеми пользователями системы.

В macOS в папке /System/Library/CoreServices/Applications (или /Applications/Utilities в OS X Mountain Lion и более ранних версиях) есть графическая утилита Network Utility, вкладка Netstat которой вызывает соответствующую команду и отображает её результат.

Примечания

Литература

  • Дайсон, Питер. Mastering OS/2 Warp : [англ.]. — Sybex, 1995. — ISBN 978-0782116632.
  • Станек, Уильям Р. Windows Command-Line Administrator's Pocket Consultant, 2nd Edition : [англ.]. — Microsoft Press, 2008. — ISBN 978-0735622623.

Ссылки