Как использовать 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-подобной операционной системой вы работаете, даже с малоизвестными.
Linux Commands | ||
Files | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc | |
Processes | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap | |
Networking | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld |
RELATED: Best Linux Laptops for Developers and Enthusiasts