Поиск по сайту:

Как использовать netstat в Linux


Команда Linux netstat дает вам кладезь информации о ваших сетевых подключениях, используемых портах и процессах, которые их используют. Узнайте, как его использовать.

Порты, процессы и протоколы

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

Слово сокеты может вызывать в воображении образ физической точки подключения провода или кабеля, но в данном контексте сокет — это программная конструкция, используемая для обработки одного конца сетевого подключения для передачи данных.

Сокеты имеют два основных состояния: они либо подключены и обеспечивают текущую сетевую связь, либо ожидают входящего подключения для подключения к ним. Существуют и другие состояния, такие как состояние, когда сокет находится на полпути к установлению соединения с удаленным устройством, но если оставить в стороне переходные состояния, вы можете думать о сокете как о подключенном или ожидающем (что часто называют прослушиванием). ).

Сокет прослушивания называется сервером, а сокет, запрашивающий соединение с сокетом прослушивания, называется клиентом. Эти имена не имеют ничего общего с аппаратными или компьютерными ролями. Они просто определяют роль каждого сокета на каждом конце соединения.

Команда netstat позволяет узнать, какие сокеты подключены и какие прослушиваются. Это означает, что он сообщает вам, какие порты используются и какие процессы их используют. Он может показать вам таблицы маршрутизации и статистику о ваших сетевых интерфейсах и многоадресных соединениях.

Функциональность netstat со временем воспроизводилась в различных утилитах Linux, таких как ip и ss. Знать этого дедушку всех команд сетевого анализа все же стоит, потому что он доступен во всех Linux и Unix-подобных операционных системах и даже в Windows и Mac.

Вот как его использовать с примерами команд.

Список всех сокетов

Опция -a (все) заставляет netstat показывать все подключенные и ожидающие сокеты. Эта команда может создать длинный список, поэтому мы передаем ее в less.

netstat -a | less

Список включает сокеты TCP (IP), TCP6 (IPv6) и UDP.

Окно в окне терминала немного затрудняет просмотр того, что происходит. Вот пара разделов из этого списка:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address     Foreign Address State 
tcp        0      0 localhost:domain  0.0.0.0:*       LISTEN 
tcp        0      0 0.0.0.0:ssh       0.0.0.0:*       LISTEN 
tcp        0      0 localhost:ipp     0.0.0.0:*       LISTEN 
tcp        0      0 localhost:smtp    0.0.0.0:*       LISTEN 
tcp6       0      0 [::]:ssh          [::]:*          LISTEN 
tcp6       0      0 ip6-localhost:ipp [::]:*          LISTEN 
.
.
.
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags   Type     State       I-Node  Path
unix  24     [ ]     DGRAM                12831   /run/systemd/journal/dev-log
unix  2      [ ACC ] STREAM    LISTENING  24747   @/tmp/dbus-zH6clYmvw8
unix  2      [ ]     DGRAM                26372   /run/user/1000/systemd/notify
unix  2      [ ]     DGRAM                23382   /run/user/121/systemd/notify
unix  2      [ ACC ] SEQPACKET LISTENING  12839   /run/udev/control

В разделе «Активный Интернет» перечислены подключенные внешние подключения и локальные сокеты, прослушивающие запросы на удаленное подключение. То есть в нем перечислены сетевые соединения, которые установлены (или будут установлены) с внешними устройствами.

В разделе «Домен UNIX» перечислены подключенные и прослушиваемые внутренние соединения. Другими словами, в нем перечислены соединения, установленные на вашем компьютере между различными приложениями, процессами и элементами операционной системы.

Колонки «Активный интернет» это:

  • Proto: протокол, используемый этим сокетом (например, TCP или UDP).
  • Recv-Q: очередь получения. Это входящие байты, которые были получены и помещены в буфер, ожидая, пока локальный процесс, использующий это соединение, прочитает и использует их.
  • Send-Q: очередь отправки. Это показывает байты, которые готовы к отправке из очереди отправки.
  • Локальный адрес. Информация об адресе локального конца соединения. По умолчанию netstat отображает локальное имя хоста для адреса и имя службы для порта.
  • Внешний адрес – адрес и номер порта удаленного конца соединения.
  • Состояние. Состояние локального сокета. Для сокетов UDP это обычно пусто. См. таблицу state ниже.

Для соединений TCP значение state может быть одним из следующих:

  • ПРОСЛУШИВАТЬ: только на стороне сервера. Сокет ожидает запроса на подключение.
  • SYN-SENT: только на стороне клиента. Этот сокет сделал запрос на подключение и ожидает, будет ли он принят.
  • SYN-RECEIVED: только на стороне сервера. Этот сокет ожидает подтверждения соединения после принятия запроса на соединение.
  • УСТАНОВЛЕНО: сервер и клиенты. Между сервером и клиентом установлено рабочее соединение, позволяющее передавать данные между ними.
  • FIN-WAIT-1: Сервер и клиенты. Этот сокет ожидает запроса на завершение соединения от удаленного сокета или подтверждения запроса на завершение соединения, который ранее был отправлен из этого сокета.
  • FIN-WAIT-2: Сервер и клиенты. Этот сокет ожидает запроса на завершение соединения от удаленного сокета.
  • ПРИНЯТЬ-ЖДАТЬ: сервер и клиент. Этот сокет ожидает запроса на завершение соединения от локального пользователя.
  • ЗАКРЫТИЕ: Сервер и клиенты. Этот сокет ожидает подтверждения запроса на завершение соединения от удаленного сокета.
  • ПОСЛЕДНИЙ ПОДТВЕРЖДЕНИЕ: сервер и клиент. Этот сокет ожидает подтверждения запроса на завершение соединения, отправленного на удаленный сокет.
  • TIME-WAIT: Сервер и клиенты. Этот сокет отправил подтверждение удаленному сокету, чтобы сообщить ему, что он получил запрос на завершение удаленного сокета. Теперь он ожидает, чтобы убедиться, что подтверждение получено.
  • ЗАКРЫТО: соединение отсутствует, поэтому сокет закрыт.

Столбцы «Домен Unix»:

  • Proto: протокол, используемый этим сокетом. Это будет «unix».
  • RefCnt: количество ссылок. Количество подключенных процессов, подключенных к этому сокету.
  • Флаги. Обычно это значение ACC , что означает SO_ACCEPTON, означающее, что сокет ожидает запроса на подключение. SO_WAITDATA, отображаемый как W, означает наличие данных, ожидающих чтения. SO_NOSPACE, показанный как N, означает, что нет места для записи данных в сокет (т. е. буфер отправки заполнен).
  • Тип. Тип сокета. См. таблицу type ниже.
  • Состояние. Состояние сокета. См. таблицу state ниже.
  • I-Node: индексный дескриптор файловой системы, связанный с этим сокетом.
  • Путь: путь файловой системы к сокету.

тип сокета домена Unix может быть одним из следующих:

  • DGRAM. Сокет используется в режиме дейтаграмм с использованием сообщений фиксированной длины. Надежность, упорядоченность и отсутствие дубликатов дейтаграмм не гарантируется.
  • STREAM: этот сокет является потоковым сокетом. Это обычный «нормальный» тип подключения к сокету. Эти сокеты предназначены для обеспечения надежной упорядоченной (по порядку) доставки пакетов.
  • RAW: этот сокет используется как необработанный. Необработанные сокеты работают на сетевом уровне модели OSI и не ссылаются на заголовки TCP и UDP с транспортного уровня.
  • RDM: этот сокет расположен на одном конце соединения для надежной доставки сообщений.
  • SEQPACKET. Этот сокет работает как сокет с последовательными пакетами, что является еще одним средством обеспечения надежной, упорядоченной и неповторяющейся доставки пакетов.
  • PACKET: сокет доступа к необработанному интерфейсу. Пакетные сокеты используются для приема или отправки необработанных пакетов на уровне драйвера устройства (т. е. на уровне канала передачи данных) модели OSI.

состояние сокета домена Unix может быть одним из следующих:

  • БЕСПЛАТНО: этот сокет не распределен.
  • ПРОСЛУШИВАНИЕ: этот сокет прослушивает входящие запросы на подключение.
  • ПОДКЛЮЧЕНИЕ: этот сокет находится в процессе подключения.
  • ПОДКЛЮЧЕНО: соединение установлено, и сокет может принимать и передавать данные.
  • ОТКЛЮЧЕНИЕ: соединение находится в процессе разрыва.

Ого, сколько информации! Многие параметры netstat тем или иным образом уточняют результаты, но не слишком сильно меняют содержание. Давайте взглянем.

Список сокетов по типу

Команда netstat -a может предоставить больше информации, чем вам нужно. Если вы хотите или должны видеть только сокеты TCP, вы можете использовать параметр -t (TCP), чтобы ограничить отображение только сокетами TCP.

netstat -at | less

Дисплей значительно уменьшается. Все перечисленные сокеты являются сокетами TCP.

Параметры -u (UDP) и -x (UNIX) ведут себя аналогичным образом, ограничивая результаты типом сокета, указанным в командной строке. Вот используемая опция -u (UDP):

netstat -au | less

Перечислены только сокеты UDP.

Список сокетов по состоянию

Чтобы просмотреть сокеты, находящиеся в состоянии прослушивания или ожидания, используйте параметр -l (прослушивание).

netstat -l | less

Перечисленные сокеты — это те, которые находятся в состоянии прослушивания.

Это можно комбинировать с параметрами -t (TCP, -u (UDP) и -x (UNIX) для дальнейшего поиска интересующих сокетов. Давайте найдем прослушивающие сокеты TCP:

netstat -lt | less

Теперь мы видим только прослушивающие сокеты TCP.

Сетевая статистика по протоколам

Чтобы просмотреть статистику для протокола, используйте параметр -s (статистика) и передайте параметры -t (TCP), -u (UDP ) или -x (UNIX). Если вы просто используете опцию -s (статистика) отдельно, вы увидите статистику для всех протоколов. Давайте проверим статистику для протокола TCP.

netstat -st | less

Коллекция статистики TCP-соединений отображается в less.

Отображение имен процессов и PID

Может быть полезно увидеть идентификатор процесса (PID) процесса, использующего сокет, вместе с именем этого процесса. Опция -p (программа) делает именно это. Давайте посмотрим, каковы PID и имена процессов для процессов, использующих сокет TCP, который находится в состоянии прослушивания. Мы используем sudo, чтобы получать всю доступную информацию, включая любую информацию, для которой обычно требуются права root.

sudo netstat -p -at

Вот этот вывод в отформатированной таблице:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address       Foreign Address   State    PID/Program name 
tcp      0        0 localhost:domain    0.0.0.0:*         LISTEN   6927/systemd-resolv 
tcp      0        0 0.0.0.0:ssh         0.0.0.0:*         LISTEN   751/sshd 
tcp      0        0 localhost:ipp       0.0.0.0:*         LISTEN   7687/cupsd 
tcp      0        0 localhost:smtp      0.0.0.0:*         LISTEN   1176/master 
tcp6     0        0 [::]:ssh            [::]:*            LISTEN   751/sshd 
tcp6     0        0 ip6-localhost:ipp   [::]:*            LISTEN   7687/cupsd 
tcp6     0        0 ip6-localhost:smtp  [::]:*            LISTEN   1176/master

У нас есть дополнительный столбец под названием «PID/имя программы». В этом столбце перечислены PID и имя процесса, использующего каждый из сокетов.

Список числовых адресов

Еще один шаг, который мы можем сделать, чтобы устранить некоторую двусмысленность, — отобразить локальные и удаленные адреса как IP-адреса вместо разрешенных доменных имен и имен хостов. Если мы используем параметр -n (числовой), IPv4-адреса отображаются в десятичном формате с точками:

sudo netstat -an | less

IP-адреса отображаются в виде числовых значений. Также показаны номера портов, разделенные двоеточием «:» от IP-адреса.

IP-адрес 127.0.0.1 показывает, что сокет привязан к петлевому адресу локального компьютера. Вы можете думать об IP-адресе 0.0.0.0 как о «маршруте по умолчанию» для локальных адресов и «любом IP-адресе» для внешних адресов. Адреса IPv6, отображаемые как «::», также являются нулевыми адресами.

Перечисленные порты можно легко проверить, чтобы увидеть, каково их обычное назначение:

  • 22: это прослушивающий порт Secure Shell (SSH).
  • 25: это порт прослушивания Simple Mail Transfer Protocol (SMTP).
  • 53: это прослушивающий порт системы доменных имен (DNS).
  • 68: это порт прослушивания протокола динамической конфигурации хоста (DHCP).
  • 631: это прослушивающий порт Common UNIX Printing System (CUPS).

Отображение таблицы маршрутизации

Параметр -r (маршрут) отображает таблицу маршрутизации ядра.

sudo netstat -r

Вот этот вывод в аккуратной таблице:

Kernel IP routing table
Destination   Gateway       Genmask        Flags  MSS  Window  irtt  Iface
default       Vigor.router  0.0.0.0        UG       0  0          0  enp0s3
link-local    0.0.0.0       255.255.0.0    U        0  0          0  enp0s3
192.168.4.0   0.0.0.0       255.255.255.0  U        0  0          0  enp0s3

И вот что означают столбцы:

  • Назначение. Целевая сеть или целевое хост-устройство (если место назначения не является сетью).
  • Шлюз. Адрес шлюза. Если адрес шлюза не задан, здесь отображается звездочка «*».
  • Genmask: маска подсети для маршрута.
  • Флаги. См. таблицу флаги ниже.
  • MSS: максимальный размер сегмента по умолчанию для TCP-соединений по этому маршруту — это максимальный объем данных, который может быть получен в одном TCP-сегменте.
  • Окно. Размер окна по умолчанию для TCP-соединений по этому маршруту, указывающий количество пакетов, которые могут быть переданы и получены до заполнения приемного буфера. На практике пакеты потребляются принимающим приложением.
  • irtt: начальное время приема-передачи. Это значение используется ядром для динамической настройки параметров TCP для удаленных подключений, которые медленно отвечают.
  • Iface: сетевой интерфейс, с которого передаются пакеты, отправленные по этому маршруту.

Значение flags может быть одним из следующих:

  • И: Маршрут готов.
  • H: Цель — хост и единственный возможный пункт назначения на этом маршруте.
  • G: Используйте шлюз.
  • R: восстановить маршрут для динамической маршрутизации.
  • D: динамически устанавливается демоном маршрутизации.
  • M: модифицируется демоном маршрутизации при получении пакета ICMP.
  • О: Устанавливается с помощью addrconf, автоматического генератора файлов конфигурации DNS и DHCP.
  • C: запись кэша.
  • !: Отклонить маршрут.

Поиск порта, используемого процессом

Если мы направим вывод netstat через grep, мы сможем найти процесс по имени и определить порт, который он использует. Мы используем параметры -a (все), -n (числовые) и -p (программные), используемые ранее, и ищем «sshd ».

sudo netstat -anp | grep "sshd"

grep находит целевую строку, и мы видим, что демон sshd использует порт 22.

Конечно, мы можем сделать это и в обратном порядке. Если мы ищем «:22», мы можем узнать, какой процесс использует этот порт, если он есть.

sudo netstat -anp | grep ":22"

На этот раз grep находит целевую строку «:22», и мы видим, что процесс, использующий этот порт, является демоном sshd с идентификатором процесса 751.

Список сетевых интерфейсов

Параметр -i (интерфейсы) отобразит таблицу сетевых интерфейсов, которые может обнаружить netstat.

sudo netstat -i

Вот вывод в более разборчивой форме:

Kernel Interface table
Iface     MTU   RX-OK  RX-ERR  RX-DRP  RX-OVR    TX-OK   TX-ERR   TX-DRP   TX-OVR Flg
enp0s3   1500 4520671       0       0  0       4779773        0        0        0 BMRU
lo      65536   30175       0       0  0         30175        0        0        0 LRU

Вот что означают столбцы:

  • Iface: имя интерфейса. Интерфейс enp0s3 — это сетевой интерфейс с внешним миром, а интерфейс lo — это петлевой интерфейс. Интерфейс замыкания на себя позволяет процессам взаимодействовать внутри компьютера, используя сетевые протоколы, даже если компьютер не подключен к сети.
  • MTU: максимальная единица передачи (MTU). Это самый большой «пакет», который можно отправить. Он состоит из заголовка, содержащего флаги маршрутизации и протокола, а также другие метаданные, а также данные, которые фактически передаются.
  • RX-OK: количество полученных пакетов без ошибок.
  • RX-ERR: количество полученных пакетов с ошибками. Мы хотим, чтобы это было как можно меньше.
  • RX-DRP: количество отброшенных (т. е. потерянных) пакетов. Мы также хотим, чтобы это значение было как можно ниже.
  • RX-OVR: количество пакетов, потерянных из-за переполнения при получении. Обычно это означает, что приемный буфер был заполнен и больше не мог принимать данные, но было получено больше данных, и их пришлось отбросить. Чем меньше эта цифра, тем лучше, и ноль идеален.
  • TX-OK: количество переданных пакетов без ошибок.
  • RX-ERR: количество переданных пакетов с ошибками. Мы хотим, чтобы это было равно нулю.
  • RX-DRP: количество пакетов, отброшенных при передаче. В идеале это значение должно быть равно нулю.
  • RX-OVR: количество пакетов, потерянных из-за переполнения при передаче. Обычно это означает, что буфер отправки был заполнен и больше не мог принимать данные, но было готово к передаче больше данных, и их нужно было отбросить.
  • Flg: флаги. См. таблицу флагов ниже.

флаги обозначают следующее:

  • B: широковещательный адрес используется.
  • L: этот интерфейс является петлевым устройством.
  • M: все пакеты принимаются (т. е. в неразборчивом режиме). Ничего не фильтруется и не отбрасывается.
  • O: протокол разрешения адресов (ARP) отключен для этого интерфейса.
  • P: это соединение точка-точка (PPP).
  • R: интерфейс запущен.
  • U: интерфейс запущен.

Получение списка членства в группах многоадресной рассылки

Проще говоря, многоадресная передача позволяет отправить пакет только один раз, независимо от количества получателей. Например, для таких услуг, как потоковое видео, это значительно повышает эффективность с точки зрения отправителя.

Опция -g (groups) заставляет netstat отображать членство в многоадресной группе сокетов на каждом интерфейсе.

sudo netstat -g

Столбцы довольно простые:

  • Интерфейс. Имя интерфейса, через который сокет передает данные.
  • RefCnt: количество ссылок, то есть количество процессов, подключенных к сокету.
  • Группа. Имя или идентификатор группы многоадресной рассылки.

Новые дети в блоке

Команды route, ip, ifconfig и ss могут предоставить многое из того, что может показать вам netstat. Все они отличные команды, и их стоит проверить.

Мы сосредоточились на netstat, потому что он доступен повсеместно, независимо от того, с какой Unix-подобной операционной системой вы работаете, даже с малоизвестными.

RELATED: Best Linux Laptops for Developers and Enthusiasts