Netstat
netstat
(network statistics) — утилита командной строки выводящая на дисплей состояние TCP-соединений (как входящих, так и исходящих), таблицы маршрутизации, число сетевых интерфейсов и сетевую статистику по протоколам. Она доступна на всех unix-подобных операционных системах, включая OS X, Linux, Solaris, и BSD, но также существует в основанных на Windows NT операционных системах начиная с Windows XP вплоть до Windows 10.
Основное назначение утилиты — это поиск сетевых проблем и определение производительности сети.
Следует иметь в виду, что в среде Linux утилита netstat, входящая в пакет net-tools, устарела. Вместо неё следует использовать утилиту ss
из пакета iproute2.
Синтаксис
netstat [-Aan] [-f семейство_адресов] [-I интерфейс] [-p имя_протокола] [система] [core] netstat [-n] [-s] [-i | -r] [-f семейство_адресов] [-I интерфейс] [-p имя_протокола] [система] [core] netstat [-n] [-I интерфейс] интервал [система] [core]
Использование
Команда netstat выводит на экран содержимое различных структур данных, связанных с сетью, в различных форматах в зависимости от указанных опций.
Первая форма команды показывает список активных сокетов для каждого протокола. Вторая форма выбирает одну из нескольких других сетевых структур данных. Третья форма показывает динамическую статистику пересылки пакетов по сконфигурированным сетевым интерфейсам; аргумент интервал задает, сколько секунд собирается информация между последовательными показами.
Значение по умолчанию для аргумента система — /unix; для аргумента core в качестве значения по умолчанию используется /dev/kmem.
Опции
-a
|
Показывать состояние всех сокетов; обычно сокеты, используемые серверными процессами, не показываются. |
-A
|
Показывать адреса любых управляющих блоков протокола, связанных с сокетами; используется для отладки. |
-b
|
Отображение исполняемого файла, участвующего в создании каждого подключения, или ожидающего порта. Иногда известные исполняемые файлы содержат множественные независимые компоненты. Тогда отображается последовательность компонентов, участвующих в создании подключения, либо ожидающий порт. В этом случае имя исполняемого файла находится снизу в скобках [ ], сверху - компонент, который им вызывается, и так до тех пор, пока не достигается TCP/IP. Заметьте, что такой подход может занять много времени и требует достаточных разрешений. |
-i
|
Показывать состояние автоматически сконфигурированных (auto-configured) интерфейсов. Интерфейсы, статически сконфигурированные в системе, но не найденные во время загрузки, не показываются. |
-n
|
Показывать сетевые адреса как числа. netstat обычно показывает адреса как символы. Эту опцию можно использовать с любым форматом показа. |
-r
|
Показать таблицы маршрутизации. При использовании с опцией -s показывает статистику маршрутизации. |
-s
|
Показать статистическую информацию по протоколам. При использовании с опцией -r показывает статистику маршрутизации. |
-f сеймество_адресов
|
Ограничить показ статистики или адресов управляющих блоков только указанным семейством_адресов, в качестве которого можно указывать:
inet Для семейства адресов AF_INET, или unix для семейства адресов AF_UNIX. |
-I интерфейс
|
Выделить информацию об указанном интерфейсе в отдельный столбец; по умолчанию (для третьей формы команды) используется интерфейс с наибольшим объёмом переданной информации с момента последней перезагрузки системы. В качестве интерфейса можно указывать любой из интерфейсов, перечисленных в файле конфигурации системы, например, emd1 или lo0. |
-p
|
Отобразить идентификатор/название процесса, создавшего сокет (-p, --programs display PID/Program name for sockets) |
Выдаваемая информация
Активные сокеты
Для каждого активного сокета показывается протокол, размер очередей приема и получения (в байтах), локальный и удаленный адрес, а также внутреннее состояние протокола. Символьный формат, обычно используемый для показа адресов сокетов, — это либо:
имя_хоста.порт
если имя хоста указано, либо:
сеть.порт
если адрес сокета задает сеть, но не конкретный хост. Имена хостов и сетей берутся из соответствующих записей в файле /etc/hosts или /etc/networks.
Если имя сети или хоста для адреса неизвестно (или если указана опция -n), адрес показывается числами. Не указанные или «обобщенные» адреса и Порт (TCP/IP)|порты показываются как «*». Подробнее о соглашениях по именованию в Internet см. страницу справочного руководства inet.
Сокеты TCP
Для сокетов TCP допустимы следующие значения состояния:
CLOSED | Закрыт. Сокет не используется. |
LISTEN (LISTENING) | Ожидает входящих соединений. |
SYN_SENT | Активно пытается установить соединение. |
SYN_RECEIVED | Идет начальная синхронизация соединения. |
ESTABLISHED | Соединение установлено. |
CLOSE_WAIT | Удаленная сторона отключилась; ожидание закрытия сокета. |
FIN_WAIT_1 | Сокет закрыт; отключение соединения. |
CLOSING | Сокет закрыт, затем удаленная сторона отключилась; ожидание подтверждения. |
LAST_ACK | Удаленная сторона отключилась, затем сокет закрыт; ожидание подтверждения. |
FIN_WAIT_2 | Сокет закрыт; ожидание отключения удаленной стороны. |
TIME_WAIT | Сокет закрыт, но ожидает пакеты, ещё находящиеся в сети для обработки |
Сетевые структуры данных
Показываемые данные зависят от выбора опции, -i или -r. Если указаны обе опции, netstat выберет -i.
Показ таблицы маршрутизации
Таблица маршрутизации показывает все имеющиеся маршруты (routes) и статус каждого из них. Каждый маршрут состоит из целевого хоста или сети и шлюза (gateway), который используется для пересылки пакетов. Столбец flags (флаги) показывает статус маршрута (U, если он включен), ведёт ли маршрут на шлюз (G), был ли маршрут создан динамически при помощи перенаправления (D), и используется ли адрес индивидуального хоста (H) вместо адреса сети. Например, интерфейс закольцовывания (loopback transport provider) lo0 всегда имеет флаг H.
Прямые маршруты создаются для каждого интерфейса, подключенного к локальному хосту; поле gateway (шлюз) для таких записей показывает адрес выходного интерфейса.
Столбец refcnt показывает текущее количество активных использований для маршрута. Протоколы, ориентированные на соединение, обычно используют в ходе соединения один маршрут, тогда как протоколы без соединения получают маршрут для каждой посылки одному и тому же адресату.
Столбец use показывает количество пакетов, посланных по маршруту.
Столбец interface показывает сетевой интерфейс, используемый маршрутом.
#netstat -rn
Routing tables Internet: Destination Gateway Flags Refs Use Netif Expire default 10.26.95.253 UGS 0 2983649 rl0 10.26.95.0/24 link#3 UC 0 0 vr0 10.26.95.253/32 link#3 UC 0 0 vr0 127.0.0.1 127.0.0.1 UH 0 8602 lo0
Показать все активные TCP (-t)соединения с интернетом:
#netstat -tap
#netstat -nlp | grep snmpd
#netstat -anp --tcp | grep -v 1720
Суммарная статистика передачи данных
Когда задан аргумент интервал, netstat показывает таблицу суммарной статистической информации о переданных пакетах, ошибках и коллизиях. Первая показываемая строка данных, а также каждая последующая 24-я строка содержит суммарную статистическую информацию с момента последней перезагрузки системы. Каждая последующая строка показывает данные, накопленные за очередной указанный в командной строке интервал с момента последнего показа.
Показать все активные соединения по протоколу TCP и UDP:
#netstat -ntu
Непрерывно отслеживаем соединения:
#netstat -cat
Показать статистику UDP или TCP:
#netstat -su
IcmpMsg: InType3: 9040 InType5: 27 InType8: 1 InType11: 407 OutType0: 1 OutType3: 1244 Udp: пакетов принято: 75849 принято пакетов на неизвестный порт: 1183 ошибок приема пакетов: 0 пакетов послано: 144780 UdpLite: IpExt: InMcastPkts: 1390 OutMcastPkts: 185 InBcastPkts: 17666 OutBcastPkts: 1473 InOctets: 92565327 OutOctets: 855223704 InMcastOctets: 129017 OutMcastOctets: 23069 InBcastOctets: 1609681 OutBcastOctets: 202516
Предупреждения
Таблицы ядра могут изменяться по ходу их обработки программой netstat, что приводит к некорректным или неполным результатам.