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
Чтобы отобразить все порты, открытые процессом с указанным PID:
netstat -aop | grep "pid"
Для непрерывного отображения открытых TCP и UDP-соединений в числовом виде и программ, их использующих (Linux):
netstat -nutpacw
Для отображения активных TCP-соединений и идентификаторов процессов каждые 5 секунд (только Windows NT и выше или Windows 2000 с патчем):
netstat -o 5
Для вывода активных TCP-соединений и идентификаторов процессов в числовом виде:
netstat -no
| Команда | Объяснение |
|---|---|
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 не используют явных разделителей полей, из-за чего в числовом выводе значения могут сливаться, что приводит к ошибкам.
Особенности платформ
В 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 которой вызывает соответствующую команду и отображает её результат.
Примечания
Литература
Ссылки
netstat(8)— страница справки man для разработчика Linux — администрация и административные команды (англ.)netstat(1)— страница справки man по пользовательским командам FreeBSD (англ.)netstat(8)— страница справки man Solaris 10 (англ.)- Microsoft TechNet: Netstat — документация по консольной команде Windows netstat.exe (англ.). technet.microsoft.com. Дата обращения: 14 июня 2024.
- net-tools — страница проекта на SourceForge (англ.). sourceforge.net. Дата обращения: 14 июня 2024.
- Netstat Command (англ.). windowscmd.com. Дата обращения: 14 июня 2024. Архивировано 15 января 2022 года.