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 для определения, какое приложение прослушивает определённый порт, например:

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


2. Используя команду ss
ss — это другой полезный инструмент для отображения информации о сокетах. Её вывод выглядит похоже с тем, какую информацию даёт netstat. В документации netstat сказано, что она в основном устарела и её заменой является как раз ss.
Следующая команда покажет все прослушиваемые порты для TCP и 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 (используемые порты)
При устранении неполадок сетевого подключения или проблем, связанных с конкретным приложением, в первую очередь следует проверить, какие порты фактически используются в вашей системе и какое приложение прослушивает конкретный порт.
Что такое порт прослушивания
Сетевой порт идентифицируется по его номеру, связанному IP-адресу и типу протокола связи, например TCP или UDP.
Порт прослушивания — это сетевой порт, на котором приложение или процесс прослушивает, выступая в качестве конечной точки связи.
Каждый порт прослушивания может быть открыт или закрыт (отфильтрован) с помощью брандмауэра. В общих чертах, открытый порт — это сетевой порт, который принимает входящие пакеты из удаленных мест.
У вас не может быть двух служб, слушающих один и тот же порт на одном IP-адресе.
Проверьте порты прослушивания с помощью netstat
netstat — это инструмент командной строки, который может предоставить информацию о сетевых подключениях.
Чтобы вывести список всех прослушиваемых портов TCP или UDP, включая службы, использующие порты, и статус сокета, используйте следующую команду:
Параметры, используемые в этой команде, имеют следующее значение:
Результат будет выглядеть примерно так:
Важными столбцами в нашем случае являются:
Выходные данные показывают, что на этой машине порт 22 используется сервером SSH:
Если вывод пуст, это означает, что порт ничего не прослушивает.
Вы также можете фильтровать список по критериям, например, PID, протоколу, состоянию и так далее.
Проверьте порты прослушивания с помощью ss
Результат почти такой же, как у netstat :
Проверьте порты прослушивания с помощью lsof
lsof — это мощная утилита командной строки, которая предоставляет информацию о файлах, открытых процессами.
В Linux все является файлом. Вы можете думать о сокете как о файле, который записывает в сеть.
Чтобы получить список всех прослушивающих TCP-портов с типом lsof :
Используются следующие параметры:
Большинство имен выходных столбцов говорят сами за себя:
Чтобы узнать, какой процесс прослушивает определенный порт, например порт 3306 вы должны использовать:
Выходные данные показывают, что сервер MySQL использует порт 3306 :
Для получения дополнительной информации посетите страницу руководства lsof и прочтите обо всех других мощных возможностях этого инструмента.
Выводы
Мы показали вам несколько команд, которые вы можете использовать, чтобы проверить, какие порты используются в вашей системе, и как узнать, какой процесс прослушивает определенный порт.
Если у вас есть вопросы или замечания, пожалуйста, оставьте комментарий ниже.
🐧 Как определить, какая служба прослушивает конкретный порт
В этом руководстве объясняется несколько разных способов узнать, какая служба прослушивает определенный порт в Linux.
Большинство из вас знает порт по умолчанию для популярных служб или процессов
Например, порт Apache по умолчанию – 80, порт FTP по умолчанию – 21, а порт SSH по умолчанию – 22.
Вы можете найти имена и номера портов в Linux, как описано в этом руководстве.
Номера портов по умолчанию также можно изменить на любые пользовательские порты для защиты сервера Linux.
Если изменить номер порта по умолчанию, как вы узнаете, какая служба прослушивает какой порт?
Вот что мы собираемся выяснить сейчас!
Найдите, какая служба прослушивает определенный порт в Linux
Я перечислил четыре метода, которые помогают проверить, какая служба работает с определенным номером порта.
Я буду продолжать обновлять этот список, если буду сталкиваться с любыми новыми методами в будущем.
Так что, добавьте в закладки и проверяйте эту статью время от времени.
Метод 1 – Использование netstat
Это наиболее часто используемый способ узнать, какая служба прослушивает какой порт.
Netstat – это утилита командной строки, используемая для печати сетевых подключений, таблиц маршрутизации, статистики интерфейса, маскарадных подключений и многоадресного членства.
Netstat доступен в репозиториях по умолчанию большинства дистрибутивов Linux.
Чтобы установить его на Arch Linux и его вариантах, выполните:
Linux. Кто сидит на портах?
Дата 11.10.2020 Автор Alex Рубрика Интернет
Для получения списка открытых портов используем утилиту «netstat», которая показывает все TCP/UDP входящие/исходящие соединения. Выполним следующую команду от лица суперпользователя:
В этой команде используется пять ключей, чтобы сформировать список только из тех портов, которые прослушиваются, и распечатать названия программ, которые это делают. Разберём все ключи:
-l показать только прослушиваемые «LISTEN» порты
-n показывать сетевые адреса как ip адреса (числа), а не пытаться определять домены
-t показывать TCP порты
-u показывать UDP порты
-p показывать программу, которая слушает порт
При проверке портов обращайте внимание на ip адрес порта. Если он 127.0.0.*, то это внутренний адрес вашего устройства. То есть извне нельзя получить к нему доступ. К примеру, не стоит беспокоиться, если увидите процесс systemd-resolve по адресу 127.0.0.53:53. Этот процесс обслуживает DNS кеш устройства. Не удаляйте его, он нужен для работы интернета.
Но если вы видите порты с ip адресом «0.0.0.0» или «::», то к этим портам можно получить доступ извне. Но только если настроено правило в фаерволе.
Сейчас на замену «netstat» приходит утилита «ss». Ключи у них совпадают, поэтому можно писать:
Узнать название программы через занимаемый порт
Если нужно узнать название программы, которая занимает определённый порт, то можно получить его с помощью команды:
14 примеров команды ss для мониторинга сетевых подключений
Команда ss — это инструмент, который используется для отображения информации о сетевых сокетах в системе Linux. Инструмент отображает более подробную информацию, чем команда netstat, которая используется для отображения активных соединений сокетов.
В этом руководстве мы подробно рассмотрим, как можно использовать команду ss для отображения различной информации о сетевых подключения (сокетах) в Linux.
1. Перечисление всех соединений
Базовая команда ss без каких-либо опций просто выводит список всех соединений независимо от состояния, в котором они находятся.
Если ни одна из опций не используется, ss отображает список открытых не слушающих сокетов (например, TCP/UNIX/UDP), которые установили соединение.

2. Список слушающих и не слушающих портов
Вы можете получить список как слушающих, так и не слушающих портов, используя опцию -a, как показано ниже.
3. Список прослушивающих сокетов
Чтобы отобразить только сокеты прослушивания, используйте флаг -l:
4. Список всех TCP соединений
Чтобы отобразить все соединения TCP, используйте параметр -t:

5. Список всех слушающих TCP соединения
Для просмотра всех слушающих TCP-сокетов используйте комбинацию -lt:
6. Список всех UDP соединений
Для просмотра всех сокетов с UDP соединениями используйте параметр -ua:
7. Список всех слушающих UDP соединений
Для просмотра списка подключений UDP используйте параметр -lu.
8. Отображение у сокетов PID (идентификаторов процессов)
Для отображения идентификаторов процессов, связанных с соединениями сокетов, используйте флаг -p:
9. Показать сводную статистику
Чтобы вывести сводную статистику, используйте опцию -s.

10. Показать сокеты IPv4 и IPv6
Если вам интересны соединения через сокет IPv4, используйте опцию -4.
Чтобы отобразить соединения IPv6, используйте параметр -6.
11. Фильтр соединений по номеру порта
Команда ss также позволяет фильтровать номер порта сокета или номер адреса. Например, для отображения всех соединений сокетов с портом назначения или исходным портом ssh выполните команду.

12. Вывод номеров портов в числовом формате, а не имени в ss
По умолчанию команда ss показывает имена портов, чтобы выводились порты в виде чисел, используйте опцию -n:
13. Поиск открытых портов на Linux
Следующая команда покажет все прослушиваемые порты для TCP и UDP соединений в виде цифровых значений:
14. Поиск программ, которые прослушивают порты на Linux
Если добавить ключ -p, то программа дополнительно покажет процессы, использующие сокет:


