Команда netstat в linux

Обновлено: 04.07.2024

ОПИСАНИЕ

Netstat печатает информацию о сетевой подсистеме Linux. Тип выводимой информации контролируется первым аргументом следующим образом:

(никто)

По умолчанию netstat отображает список открытых сокетов. Если вы не укажете семейства адресов, будут напечатаны активные сокеты всех настроенных семейств адресов.

Показать таблицы маршрутизации ядра.

Отображение информации о членстве в многоадресной группе для IPv4 и IPv6.

Показать таблицу всех сетевых интерфейсов или указанную iface ) .

Показать список маскированных соединений.

Показать сводную статистику для каждого протокола.

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

Показывать числовые адреса вместо того, чтобы пытаться определить символические имена хостов, портов или пользователей.

показывает числовые адреса хостов, но не влияет на разрешение имен портов или пользователей.

показывает числовые номера портов, но не влияет на разрешение имен хостов или пользователей.

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

Это заставит netstat печатать выбранную информацию каждую секунду непрерывно.

Показать дополнительную информацию. Используйте эту опцию дважды для максимальной детализации.

Включите информацию, связанную с сетевыми таймерами.

Показать PID и название программы, к которой принадлежит каждый сокет.

Показывать только сокеты прослушивания. (По умолчанию они опущены.)

Распечатать информацию о маршрутизации из FIB. (Это по умолчанию.)

Распечатать информацию о маршрутизации из кэша маршрутов.

задержка

Netstat будет циклически печатать статистику каждые задержка секунд. UP .

Активные интернет-соединения (TCP, UDP, raw)

Прото

Протокол (tcp, udp, raw), используемый сокетом.

Recv-Q

Количество байтов, не скопированных пользовательской программой, подключенной к этому сокету.

Send-Q

Количество байтов, не подтвержденных удаленным хостом.

Локальный адрес

Иностранный адрес

государственный

Состояние сокета. Поскольку в сыром режиме нет состояний и обычно в UDP нет состояний, этот столбец можно оставить пустым. Обычно это может быть одно из нескольких значений:

Розетка имеет установленное соединение.

Сокет активно пытается установить соединение.

Запрос на соединение получен из сети.

Розетка закрыта, и соединение закрывается.

Соединение закрыто, и сокет ожидает отключения от удаленного конца.

После закрытия сокет ожидает обработки пакетов, все еще находящихся в сети.

Сокет не используется.

Удаленный конец отключился, ожидая закрытия сокета.

Удаленный конец отключился, а розетка закрыта. В ожидании подтверждения.

Оба сокета закрыты, но мы все еще не отправили все наши данные.

Состояние сокета неизвестно.

пользователь

Имя пользователя или идентификатор пользователя (UID) владельца сокета.

PID/Название программы

таймер

(это нужно написать)

Активные доменные сокеты UNIX

Прото

Протокол (обычно unix), используемый сокетом.

RefCnt

Счетчик ссылок (т.е. подключенные процессы через этот сокет).

Флаги

Отображаемые флаги: SO_ACCEPTON (отображается как ACC ), SO_WAITDATA ( W ) или SO_NOSPACE ( N ). SO_ACCECPTON используется для неподключенных сокетов, если их соответствующие процессы ожидают запроса на подключение. Другие флаги не представляют интереса.

Существует несколько типов доступа к сокетам:

Сокет используется в режиме датаграммы (без установления соединения).

Это потоковый (соединительный) сокет.

Сокет используется в качестве необработанного сокета.

Это последовательный пакетный сокет.

Необработанный интерфейс доступа к сокету.

государственный

Это поле будет содержать одно из следующих ключевых слов:

Сокет не выделен

Сокет собирается установить соединение.

Разъем не подключен к другому.

Такое состояние никогда не должно происходить.

PID/Название программы

Идентификатор процесса (PID) и имя процесса, для которого открыт сокет. Дополнительная информация доступна в разделе Активные подключения к Интернету , написанном выше.

Дорожка

Это путь, по которому соответствующие процессы присоединяются к сокету.

Активные сокеты IPX

(это должен сделать кто-то, кто это знает)

Активные сокеты NET/ROM

(это должен сделать кто-то, кто это знает)

Активные розетки AX.25

(это должен сделать кто-то, кто это знает)

путь (8), Ifconfig (8)

Используйте команду man (% man ), чтобы увидеть, как команда используется на вашем конкретном компьютере.

Команда netstat, входящая в стандартный набор сетевых инструментов UNIX, отображает различную network–related информацию, такую как сетевые подключения, статистику интерфейсов, таблицы маршрутизации, masquerade, multicast, и т.п.

В этой статье рассмотрим десять практических примеров использования команды netstat в Linux.

1. Список всех портов (как прослушиваемых, так и нет)

Перечислить все порты: netstat -a

Перечислить все TCP порты: netstat -at

Перечислить все UDP порты: netstat -au

2. Список сокетов, находящихся в состоянии LISTEN

Перечислить все прослушиваемые порты: netstat -l

Перечислить прослушиваемые TCP порты: netstat -lt

Перечислить прослушиваемые UDP порты: netstat -lu

Перечислить прослушиваемые UNIX сокеты: netstat -lx

3. Просмотр статистики для каждого протокола

Показать статистику всех портов: netstat -s

Показать статистику только TCP портов: netstat -st

Показать статистику только UDP портов: netstat -su

4. Отображение PID и имени процесса в выводе netstat

Опция netstat -p добавит «PID/Program Name» в вывод netstat, и может быть совмещена с любым другим набором опций. Это очень полезно при отладке, для определения того, какая программа работает на определённом порту.

5. Разрешение имён в выводе netstat

Когда вам не нужно резолвить имя хоста, имя порта, имя пользователя, используйте опцию netstat -n для вывода значений в цифровом формате. Команда покажет IP-адрес вместо хоста, номер порта вместо имени порта, UID вместо имени пользователя.

Это также ускорит вывод, так как netstat не станет выполнять ненужный поиск.

Для вывода цифровых значений только некоторых из этих пунктов, используйте следующие команды:

6. Вывод информации netstat непрерывно

Опция netstat -c будет выводить информацию непрерывно, в стиле top, обновляя экран каждые несколько секунд.

7. Неподдерживаемые системой семейства адресов

Опция netstat --verbose покажет подробный вывод, а в самом конце отобразит неподдерживаемые Address Family.

8. Маршрутизация ядра

Показать таблицу маршрутизации ядра: netstat -r

Примечание: Используйте netstat -rn для просмотра маршрута в цифровом формате без разрешения имён узлов.

9. Соответствие портов и процессов

Узнать, какой порт занимает определённая программа:

Выяснить, каким процессом используется определённый порт:

10. Сетевые интерфейсы

Показать список сетевых интерфейсов: netstat -i

Показать расширенную информацию об интерфейсах (аналогично ifconfig): netstat -ie

11. netstat -lnptux

  • -l все открытые порты (LISTEN)
  • -t по протоколу TCP
  • -u по протоколу UDP
  • -x по протоколу UNIX Socket
  • -n без резолва IP/имён
  • -p но с названиями процессов и PID-ами

Примечание: Не все процессы могут быть идентифицированы последним ключом, чужие процессы показаны не будут. Вы должны иметь права root чтобы увидеть всё.

Для получения сведений об активности и статистике сетевых соединений (интерфейсов) существует масса удобных мониторинговых приложений с графическим пользовательским интерфейсом, всевозможных виджетов и т. д. Однако, все эти решения построены на основе стандартных утилит, входящих в состав практически любой Linux- или UNIX-ориентированной системы. Для администрирования серверов на базе системы Linux такие стандартные утилиты являются достаточно исчерпывающим инструментом для получения информации о работе сети. Одной из таких является команда netstat. С помощью неё можно получить вывод с информацией о состоянии сетевого программного обеспечения, статистику сети, сведения о маршрутизации и т.д.

Синтаксис и опции netstat

Ключи можно комбинировать. Самая распространенная команда использования netstat это:


Эта команда выводит довольно большой список. Поэтому для получения нужной информации используйте grep. Например для получения всех портов которые слушаются в системе.


Контроль сетевых соединений

Используя опцию -i можно получить данные о состоянии сетевых интерфейсов системы, а также основных счётчиков трафика. Вывод предоставляется в виде наглядной таблицы с соответствующими столбцами. Формат самой таблицы зависит от используемой системы. К примеру, в Ubuntu, да и вообще в Debian-ориентированных системах он будет примерно таким:

В данном выводе видно, как ведёт себя интерфейс eno1, через который осуществляется соединение в сеть, а также что происходит с интерфейсом обратной связи lo. В столбцах RX/TX приводится статистика по трафику с указанием количества пакетов, в том числе и пакетов с ошибками. В частности, показатель RX свидетельствует о количестве пакетов, полученных интерфейсом, TX – о количестве пропущенных через этот интерфейс пакетов с момента загрузки системы или первичной активации (задействования) интерфейса.

Количество ошибок (RX-ERR, TX-ERR) как правило, не должно быть больше 1% (в некоторых случаях 5%) от общего числа пакетов. Если ошибок больше, то следует проанализировать этот параметр на других компьютерах. Большое количество ошибок в сети (на других компьютерах) свидетельствует о неполадках в окружении сети. На отдельном компьютере излишнее их (ошибок) количество говорит о неполадках с сетевым интерфейсом (сетевая карта) или с самим соединением (кабели, совместимость оборудования).

Посмотреть сетевые соединения

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

  • TIME_WAIT – ожидание на завершение соединения;
  • SYN_SENT – попытка некоторого процесса установить соединение с недоступным ресурсом или сервером;
  • SYN_WAIT – состояние, при котором данный узел не может обработать все поступающие запросы. Зачастую это может свидетельствовать об ограничении возможностей системного ядра, либо о попытках намеренно вызвать перегрузку на сервере.

Идентификация сетевых процессов

Для того, чтобы однозначно иметь представление о конкретных процессах или демонах, слушающих соединения (порты) в системе, следует воспользоваться ключами -l и -p. Первый позволяет выводить, собственно, только слушающие порты, второй — для идентификации процесса/демона, например:

Получение статистики для различных сетевых протоколов

Команда netstat позволяет видеть статистические данные по использованию всех доступных в системе протоколов. Для этого нужно использовать ключ -s:

Как видно, выводимая статистика отображается с разбивкой по разделам для каждого протокола. Здесь содержатся очень полезные сведения для анализа и поиска неполадок в работе сети.

Также для команды netstat есть ещё один полезный ключ, позволяющий выводить обновлённые данные с интервалом в одну секунду. Этот ключ работает не в каждой связке с другими опциями. Однако, отслеживание интерфейсов в режиме реального времени с этим ключом очень удобно, например команда netstat -i -a -c будет выводить статистику по использованию всех интерфейсов в системе, в том числе и отключенных (ключ -a) автоматически каждую секунду — ключ -c.

Информацию о таблице маршрутизации позволяет получить ключ -r:

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

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

Установка

Для начала проверим, установлена ли программа.

Для этого, введем в терминале название утилиты без параметров.

Если результат выполнения утилиты будет "command not found", значит она не установлена.

command not found

netstat входит в пакет net-tools, поэтому нужно устанавливать net-tools.

Устанавливаем на Astralinux / Дебиан / Убунту:
apt-get install net-tools

На centos:
yum install net-tools

Синтаксис

  • a или -all - выводит информацию о всех сокетах(об активных которые слушают порты и неактивных, которые не слушают).
  • -r или --route - выводит на экран таблицу маршрутизации.
  • -i или --interfaces - выводит информации об интерфейсах.
  • -g или --groups - показывает информацию о группах (multicast).
  • -M или --masquerade - активные nat соединения.
  • -s или --statistics - статистическая информация по протоколам (IP, Tcp, Udp, Icmp, IcmpMsg, UdpLite, TcpExt, IpExt).
  • -l или --listening - интерпретатор покажет сокеты, которые находятся в состоянии listen (слушает).
  • -p или programs - название программы для сокета.
  • --help - справочная информация.

Примеры

Для первого примера, получим информацию обо всех портах. Для этого будем использовать опцию "-a". Чтобы список не был слишком большим, ограничим его с помощью "more". more - позволяет читать большие тексты по одной странице.

$ netstat -a | more

Проверим, работу программы для кэширования данных "memcached". Для удобства будем использовать сразу три аргумента "-tap".

$ netstat -tap | grep memcached

Проверка работы программы

Как видно на скриншоте выше, команда отработала, однако на экране ничего не показала, значит memcached не работает, или вообще не установлен.

Если бы утилита работала, то в результате вывода увидели слово "LISTEN" (слушает).

listen

Посмотрим список всех портов TCP, для этого будем использовать два аргумента "at".

Смотрим порты TCP

Для просмотра всех UDP, нужно поменять аргумент "t" на "u".

Посмотрим статистику всех портов:

Для того, чтобы непрерывно выводит информацию, поможет аргумент "-с".

Вывести на экран таблицу маршрутизации.

Для примера узнаем используемый порт активного соединения ssh.
netstat -ap | grep ssh

Занятый порт

Посмотреть открытые порты.

Часто бывает так, нужно узнать какие порты открыты, для этого нужно построить список со флагом "listen".

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

Этот материал — первый в серии статей, построенных на рекомендациях, собранных от множества знатоков Linux. А именно, я спросил у наших основных разработчиков об их любимых Linux-командах, после чего меня буквально завалили ценными сведениями. А именно, речь идёт о 46 командах, некоторые из которых отличает тот факт, что о них рассказало несколько человек.


В данной серии статей будут представлены все эти команды, разбитые по категориям. Первые 7 команд, которым и посвящена эта статья, направлены на работу с сетью.

Команда ip

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

Синтаксис этой команды выглядит так:


Самое важное тут — это <OBJECT> (подкоманда). Здесь можно использовать, помимо некоторых других, следующие ключевые слова:

  • address — адрес протокола (IPv4 или IPv6) на устройстве.
  • tunnel — IP-туннель.
  • route — запись таблицы маршрутизации.
  • rule — правило в базе данных политики маршрутизации.
  • vrf — управление виртуальными устройствами маршрутизации и перенаправления трафика.
  • xfrm — управление IPSec-политикой.

Вывод IP-адресов, назначенных интерфейсу на сервере:


Назначение IP-адреса интерфейсу, например — enps03 :


Удаление IP-адреса из интерфейса:


Изменение статуса интерфейса, в данном случае — включение eth0 :


Изменение статуса интерфейса, в данном случае — выключение eth0 :


Изменение статуса интерфейса, в данном случае — изменение MTU eth0 :


Изменение статуса интерфейса, в данном случае — перевод eth0 в режим приёма всех сетевых пакетов:


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


Добавление маршрута к 192.168.1.0/24 через шлюз на 192.168.1.254:


Добавление маршрута к 192.168.1.0/24, который доступен на устройстве eth0 :


Удаление маршрута для 192.168.1.0/24, для доступа к которому используется шлюз 192.168.1.254:


Вывод маршрута к IP 10.10.1.4:

Команда ifconfig

Команда ifconfig до определённого времени представляла собой один из основных инструментов, используемых многими системными администраторами для настройки сетей и решения сетевых проблем. Теперь ей на замену пришла команда ip , о которой мы только что говорили. Но если вас, всё же, интересует эта команда, можете взглянуть на данный материал.

Команда mtr

MTR (Matt's traceroute) — это программа, работающая в режиме командной строки, представляющая собой инструмент для диагностики сетей и устранения сетевых неполадок. Эта команда совмещает в себе возможности ping и traceroute . Она, как traceroute , может выводить сведения о маршруте, по которому сетевые данные идут от одного компьютера к другому. Она выводит массу полезных сведений о каждом шаге маршрутизации, например — время ответа системы. Благодаря использованию команды mtr можно получить довольно подробные сведения о маршруте, можно обнаружить устройства, которые вызывают проблемы при прохождении данных по сети. Если, например, наблюдается рост времени ответа системы, или рост числа потерянных пакетов, это позволяет с уверенностью говорить о том, что где-то между исследуемыми системами возникла проблема с сетевым соединением.

Синтаксис команды выглядит так:


Рассмотрим несколько распространённых способов применения mtr .

Если вызвать эту команду, указав лишь имя или адрес хоста — она выведет сведения о каждом шаге маршрутизации. В частности — имена хостов, сведения о времени их ответа и о потерянных пакетах:


Вот — вариант использования mtr , когда вместо имён хостов выводятся их IP-адреса (речь идёт о ключе -g , благодаря которому вместо имён выводятся числовые IP-адреса):


А следующий вариант команды позволяет выводить и имена, и IP-адреса хостов:


А так можно получить отчёт, содержащий результаты работы mtr :


Вот — ещё один вариант получения такого отчёта:


Для того чтобы принудительно использовать TCP вместо ICMP — надо поступить так:


А вот так можно использовать UDP вместо ICMP:


Вот — вариант команды, где задаётся максимальное количество шагов маршрутизации:


Так можно настроить размер пакета:


Для вывода результатов работы mtr в формате CSV используется такая команда:


Вот — команда для вывода результатов работы mtr в формате XML:

Команда tcpdump

Утилита tcpdump предназначена для захвата и анализа пакетов.

Установить её можно так:


Прежде чем приступить к захвату пакетов, нужно узнать о том, какой интерфейс может использовать эта команда. В данном случае нужно будет применить команду sudo или иметь root-доступ к системе.


Если нужно захватить трафик с интерфейса eth0 — этот процесс можно запустить такой командой:


Или — такой, с указанием (через ключ -c ) количества пакетов, которые нужно захватить:

▍ Захват трафика, идущего к некоему хосту и от него

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


Для захвата трафика, идущего с хоста 8.8.8.8, используется такая команда:


Для захвата трафика, уходящего на хост 8.8.8.8, применяется такая команда:

▍ Захват трафика, идущего в некую сеть и из неё

Трафик можно захватывать и ориентируясь на конкретную сеть. Делается это так:


Ещё можно поступить так:


Можно, кроме того, фильтровать трафик на основе его источника или места, в которое он идёт.

Вот — пример захвата трафика, отфильтрованного по его источнику (то есть — по той сети, откуда он приходит):


Вот — захват трафика с фильтрацией по сети, в которую он направляется:

▍ Захват трафика, поступающего на некий порт и выходящего из некоего порта

Вот пример захвата трафика только для DNS-порта по умолчанию (53):


Захват трафика для заданного порта:


Захват трафика для всех портов кроме 80 и 25:

Команда netstat

Инструмент netstat используется для вывода сведений о сетевых соединениях и таблицах маршрутизации, данных о работе сетевых интерфейсов, о masquerade-соединениях, об элементах групп многоадресной рассылки. Эта утилита является, как и ifconfig , частью пакета net-tools . В новом пакете iproute2 для достижения тех же целей используется утилита ss .

Если в вашей системе netstat отсутствует, установить эту программу можно так:


Ей, в основном, пользуются, вызывая без параметров:


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


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


Для вывода сведений обо всех портах и соединениях, вне зависимости от их состояния и от используемого протокола, применяется такая конструкция:


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


Если нужны данные по UDP-портам — утилиту вызывают так:


Список портов любых протоколов, ожидающих соединений, можно вывести так:


Список TCP-портов, ожидающих соединений, выводится так:


Так выводят список UDP-портов, ожидающих соединений:


А так — список UNIX-портов, ожидающих соединений:


Вот — команда для вывода статистических сведений по всем портам вне зависимости от протокола:


Так выводятся статистические сведения по TCP-портам:


Для просмотра списка TCP-соединений с указанием PID/имён программ используется такая команда:


Для того чтобы найти процесс, который использует порт с заданным номером, можно поступить так:

Команда nslookup

Команда nslookup используется для интерактивного «общения» с серверами доменных имён, находящимися в интернете. Она применяется для выполнения DNS-запросов и получения сведений о доменных именах или IP-адресах, а так же — для получения любых других специальных DNS-записей.

Рассмотрим распространённые примеры использования этой команды.

Получение A-записи домена:


Просмотр NS-записей домена:


Выяснение сведений о MX-записях, в которых указаны имена серверов, ответственных за работу с электронной почтой:


Обнаружение всех доступных DNS-записей домена:


Проверка A-записи для выяснения IP-адресов домена — это распространённая практика, но иногда нужно проверить то, имеет ли IP-адрес отношение к некоему домену. Для этого нужно выполнить обратный просмотр DNS:

Команда ping

Эта команда, при простом способе её использования, принимает лишь один параметр: имя хоста, подключение к которому надо проверить, или его IP-адрес. Вот как это может выглядеть:


В данном случае работу команды ping можно остановить, воспользовавшись сочетанием клавиш CTRL+C . В противном случае она будет выполнять запросы до тех пор, пока её не остановят. После каждой ping-сессии выводятся сводные данные, содержащие следующие сведения:

  • Min — минимальное время, которое требуется на получение ответа от пингуемого хоста.
  • Avg — среднее время, которое требуется на получение ответа.
  • Max — максимальное время, которое требуется на получение ответа.

Обычно, если запустить команду ping в её простом виде, не передавая ей дополнительные параметры, Linux будет пинговать интересующий пользователя хост без ограничений по времени. Если нужно изначально ограничить количество ICMP-запросов, например — до 10, команду ping надо запустить так:


А для того чтобы увидеть лишь итоговый отчёт работы ping — можно воспользоваться ключом -q :


В системах с несколькими сетевыми интерфейсами можно задавать конкретный интерфейс, которым должна пользоваться команда ping . Например, есть компьютер, имеющий интерфейсы eth0 и eth1 . Если нужно, чтобы команда ping использовала бы интерфейс eth0 — надо запустить её так:


Или можно указать адрес интерфейса. В данном случае речь идёт об IP-адресе 10.233.201.45:


Применяя эту команду, можно указать и то, какую версию протокола IP использовать — v4 или v6:

▍ Destination Host Unreachable

Вероятной причиной получения такого ответа является отсутствие маршрута от локальной хост-системы к целевому хосту. Или, возможно, это удалённый маршрутизатор сообщает о том, что у него нет маршрута к целевому хосту.

▍ Request timed out

▍ Unknown host/Ping Request Could Not Find Host

Такой результат может указывать на то, что неправильно введено имя хоста, или хоста с таким именем в сети просто не существует.

О хорошем качестве связи между исследуемыми системами говорит уровень потери пакетов в 0%, а так же — низкое значение времени получения ответа. При этом в каждом конкретном случае время получения ответа варьируется, так как оно зависит от разных параметров сети. В частности — от того, какая среда передачи данных используется в конкретной сети (витая пара, оптоволокно, радиоволны).

Итоги

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

Читайте также: