Кто слушает порт linux
Перейти к содержимому

Кто слушает порт linux

  • автор:

Проверка занятости порта сервисом в Linux

Oct 4, 2018 06:09 · 637 words · 3 minute read lsof netstat fuser tips

Однажды вам обязательно понадобится проверить используемый порт определенного сервиса (или наоборот, найти сервисы, слушающие конкретный порт) — в Linux существует несколько утилит командной строки, которые могут с этим помочь. Давайте разберемся!

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

Устанавливается данная утилита в разных дистрибутивах по-разному, например, для RedHat и CentOS:

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

Вывод будет примерно следующим:

  • -p — вывод ID процесса и его имени;
  • -n — вывод адресов;
  • -l — вывод сокетов;
  • -t — вывод TCP соединений;
  • -u — вывод UDP соединений.

Найти сервис, запущенный на определенном порту можно так:

Аналогично можно найти на каком порту запущен определенный сервис:

Также для наших целей подойдет утилита командной строки fuser . По умолчанию она не установлена в большинстве операционных систем, чтобы установить ее в Centos/RedHat делаем так:

Например, чтобы найти идентификаторы процессов (PIDs), запущенных на 80-м порту, выполняем команду:

Результат выполнения будет примерно следующим:

Далее можем найти имя процесса по его идентификатору (PID):

Еще один способ — использование утилиты lsof . Установка ее в RedHat/CentOS выглядит так:

Вывод всех активных TCP и UPD соединений:

Результатом будет примерно следующее:

Проверить использование конкретного порта можно так:

Напоследок можно также воспользоваться утилитой whatportis . Ее установка в RedHat/Centos требует чуть больше действий:

В Debian/Ubuntu все гораздо проще:

В общем виде использование утилиты выглядит так:

Если вам неизвестно точное имя сервиса, можно воспользоваться опцией —like , например:

4 способа узнать, какие порты прослушиваются в Linux

Порт может в одном из следующих состояний: открыт (open), фильтруется (filtered), закрыт (closed), без фильтрации (unfiltered). Порт называется открытым если какое-либо приложение, служба на целевой машине прослушивает (listening) его в ожидании соединений/пакетов. Также по отношению к службе часто употребляют термин «привязка» (bind), который означает, что служба назначена к определённому порту, то есть после её запуска она будет прослушивать его, чтобы ответить на входящие запросы.

Термин «привязка» используют по отношению к службам, которые прослушивают порт на постоянной основе и готовы принять входящие соединения. Примером таких служб являются SSH, MySQL, веб-сервер. Некоторые приложения (например, веб-браузер) делают исходящие соединения. Для этих исходящих соединений обычно используется порт с номером в десятки тысяч, например, 37830 или 46392 или 54284 или что-то подобное. Но они используют порт на короткое время — только чтобы отправить запрос и получить ответ. Сразу после получения ответа программа освобождает порт. Если ей понадобится вновь сделать запрос, то она может выбрать любой другой незанятый порт — необязательно тот же самый. Такие порты не являются прослушивающими, то есть они не принимают внешние запросы на инициализацию соединения. Это состояние сокета называется ESTABLISHED, его нужно отличать от прослушивания порта (LISTENING), то есть от открытых портов.

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

1. Используя команду netstat

Netstat — это широко применяемый инструмент для запроса информации о сетевой подсистеме Linux. Вы можете использовать её для показа всех открытых портов примерно так:

Флаг -l говорит netstat вывести все прослушивающие сокеты, -t означает показать все TCP соединения, -u для показа всех UDP соединений и -p включает показывать PID и имя программы/приложения, которое прослушивает порт.

Обратите внимание, что вместо номеров портов программа выводит имена популярных служб. Если вы хотите, чтобы порты были показаны как числа, то добавьте флаг -n.

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

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

Если вам нужно чтобы данные постоянно обновлялись, то используйте ключ -c, тогда новые данные будут выводиться каждую секунду.

2. Используя команду ss

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

Следующая команда покажет все прослушиваемые порты для TCP и UDP соединений в виде цифровых значений:

Опции имеют такое же значение:

  • -l означает показать только прослушивающие сокеты (по умолчанию они опускаются);
  • -t означает показать TCP сокеты;
  • -u означает показать UDP сокеты.

Если добавить ключ -p, то программа дополнительно покажет процессы, использующие сокет:

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

3. Используя программу Nmap

Nmap — это мощный и популярный инструмент исследования сети и сканер портов. Для установки nmap в вашу систему используйте стандартный менеджер пакетов как показано ниже.

На Debian/Ubuntu/Linux Mint:

На CentOS/RHEL:

На Fedora 22+:

На Arch Linux:

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

4. Используя команду lsof

Последний инструмент, который мы рассмотрим в этой статье, это команда lsof, которая используется для вывода списка открытых файлов в Linux. Поскольку в Unix/Linux всё является файлом, открытый файл может быть потоком или сетевым файлом.

Для вывода списка всех Интернет и сетевых файлов, используйте опцию -i. Помните, что эта команда показывает смесь имён служб и цифровых портов.

Чтобы найти, какое приложение прослушивает определённый порт, запустите lsof в следующей форме:

Вот и всё! В этой статье мы узнали четыре способа проверить открытые порты в Linux. Мы также показали, как проверить, какой процесс привязан к определённому порту.

О том, как правильно понимать вывод этих команд, смотрите статью «Что означают 0.0.0.0, :*, [::], 127.0.0.1. Как понять вывод NETSTAT».

Как проверить прослушивающие порты в Linux (используемые порты)

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

В этой статье объясняется, как использовать команды netstat , ss и lsof чтобы узнать, какие службы прослушивают какие порты. Инструкции применимы для всех операционных систем Linux и Unix, таких как macOS.

Что такое порт прослушивания

Сетевой порт идентифицируется по его номеру, связанному IP-адресу и типу протокола связи, например TCP или UDP.

Порт прослушивания — это сетевой порт, на котором приложение или процесс прослушивает, выступая в качестве конечной точки связи.

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

У вас не может быть двух служб, слушающих один и тот же порт на одном IP-адресе.

Например, если вы используете веб-сервер Apache, который прослушивает порты 80 и 443 и вы пытаетесь установить Nginx , последний не запустится, потому что порты HTTP и HTTPS уже используются.

Проверьте порты прослушивания с помощью netstat

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

Чтобы вывести список всех прослушиваемых портов TCP или UDP, включая службы, использующие порты, и статус сокета, используйте следующую команду:

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

  • -t — Показать TCP-порты.
  • -u — Показать порты UDP.
  • -n — Показывать числовые адреса вместо разрешающих узлов.
  • -l — Показать только прослушивающие порты.
  • -p — Показать PID и имя процесса слушателя. Эта информация отображается только в том случае, если вы запускаете команду от имени пользователя root или sudo .

Результат будет выглядеть примерно так:

Важными столбцами в нашем случае являются:

  • Proto — протокол, используемый сокетом.
  • Local Address — IP-адрес и номер порта, который прослушивает процесс.
  • PID/Program name — PID и имя процесса.

Если вы хотите отфильтровать результаты, используйте команду grep . Например, чтобы узнать, какой процесс прослушивает TCP-порт 22, введите:

Выходные данные показывают, что на этой машине порт 22 используется сервером SSH:

Если вывод пуст, это означает, что порт ничего не прослушивает.

Вы также можете фильтровать список по критериям, например, PID, протоколу, состоянию и так далее.

netstat устарел и заменен ss и ip , но все же это одна из наиболее часто используемых команд для проверки сетевых подключений.

Проверьте порты прослушивания с помощью ss

ss — это новый netstat . В нем отсутствуют некоторые функции netstat , но он предоставляет больше состояний TCP и работает немного быстрее. Параметры команды в основном те же, поэтому переход с netstat на ss не представляет труда.

Чтобы получить список всех прослушивающих портов с помощью ss , введите:

Результат почти такой же, как у netstat :

Проверьте порты прослушивания с помощью lsof

lsof — это мощная утилита командной строки, которая предоставляет информацию о файлах, открытых процессами.

В Linux все является файлом. Вы можете думать о сокете как о файле, который записывает в сеть.

Чтобы получить список всех прослушивающих TCP-портов с типом lsof :

Используются следующие параметры:

  • -n — Не преобразовывать номера портов в имена портов.
  • -p — Не разрешать имена хостов, показывать числовые адреса.
  • -iTCP -sTCP:LISTEN — Показать только сетевые файлы с состоянием TCP LISTEN.

Большинство имен выходных столбцов говорят сами за себя:

  • COMMAND , PID , USER — имя, pid и пользователь, запускающий программу, связанную с портом.
  • NAME — номер порта.

Чтобы узнать, какой процесс прослушивает определенный порт, например порт 3306 вы должны использовать:

Выходные данные показывают, что сервер MySQL использует порт 3306 :

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

Выводы

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

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

How to find processes based on port and kill them all? [duplicate]

Find processes based on port number and kill them all.

how to complete the last column?

Oleg's user avatar

7 Answers 7

The problem with ps -efl | grep PORT_NUMBER is that PORT_NUMBER may match other columns in the output of ps as well (date, time, pid, . ). A potential killing spree if run by root!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *