Как мы все знаем, порт одновременно используется только одним процессом или службой. Порт определяет конкретную службу или процесс, запущенный в системе. Иногда при устранении неполадок нам необходимо знать, какой номер порта прослушивает определенный процесс. Все процессы, запущенные в системе, связаны с идентификационным номером процесса (PID) и номером порта. Чтобы узнать, какой номер порта прослушивает конкретный процесс, есть несколько способов, о которых мы поговорим в этой статье.
Прежде всего убедитесь, что у вас есть права root. Это поможет вам получить исчерпывающую информацию о процессах, запущенных в вашей системе.
Обратите внимание, что мы использовали Ubuntu 20.04 для выполнения команд и процедур, упомянутых в этой статье.
Метод 1. Использование команды netstat
Netstat – это наиболее часто используемая утилита командной строки, которую можно использовать для отображения информации о сетевых соединениях, статистике интерфейса и таблицах маршрутизации. Также с ее помощью можно узнать какой номер порта используется определенным процессом. Если она еще не установлена в вашей системе, используйте следующую команду:
sudo apt install net-tools
Чтобы найти номера портов, которые прослушиваются процессами, выполните в Терминале следующую команду:
sudo netstat -ltnp
Следующий вывод показывает номера портов, которые используются определенными процессами, а также их идентификаторы процессов (PID).
Если у вас нет прав sudo и вы запускаете указанную выше команду без sudo, она не будет отображать имя программы и PID, как показано в следующих выходных данных.
Теперь посмотрим, что означает ltnp в приведенной выше команде:
l – показать сокеты для прослушивания
t – показать TCP-соединения
n – показать IP-адреса и номера портов в числовой форме
p – показать PID / название программы
Если мы посмотрим на вывод $ sudo netstat -ltnp , четвертый столбец – это именно то, что мы ищем: номер порта, который прослушивает процесс.
Чтобы получить информацию о порте одного процесса, вы можете просто передать вывод netstat по конвейеру с помощью команды grep.
Например, чтобы найти номер порта по sshd, используйте следующую команду:
sudo netstat -ltnp | grep 'sshd'
Точно так же, если вы хотите узнать имя процесса, который прослушивает определенный порт, скажем, порт 80, будет использоваться следующая команда:
sudo netstat -ltnp | grep -w ':80'
Метод 2: использование команды lsof
С помощью команды lsof вы можете просмотреть список всех файлов, открытых процессами, запущенными в вашей системе. Lsof может выступать в качестве единого источника для получения информации, которая в противном случае требует большого набора инструментов администрирования. Как и в случае с командой netstat, для получения подробной информации вам потребуются привилегии sudo.
Если lsof еще не установлен в вашей системе, используйте следующую команду в Терминале, чтобы установить его:
sudo apt install lsof
После установки вы можете использовать утилиту lsof для поиска процессов, запущенных на определенных портах. Если вы запустите утилиту lsof без каких-либо параметров, она вернет много информации, которую вам будет сложно понять. Однако использование параметров с lsof может помочь вам отфильтровать и сконцентрироваться на желаемом выходе.
Теперь, чтобы найти процесс, прослушивающий определенный порт, скажем, порт 22, используйте следующую команду:
sudo lsof -i:22
Эта команда вернет все процессы, запущенные на порту 22.
Метод 3: Использование команды fuser
Fuser – это команда Linux, которая используется для определения идентификатора процесса, использующего файл, каталог или файловую систему. Мы можем использовать эту команду, чтобы найти процесс, запущенный на определенном порту.
Для использования команды fuser вам потребуется утилита psmisc. Если он еще не установлен в вашей системе, выполните следующую команду, чтобы установить его:
sudo apt install psmisc
Чтобы просмотреть процессы, запущенные на любом порту, скажем, TCP-порт 22, выполните следующую команду в терминале:
sudo fuser 22/tcp
Приведенная выше команда вернула процесс, прослушивающий порт номер 22. Теперь, чтобы просмотреть имя процесса по любому идентификатору процесса, используйте следующую команду:
ps -p [идентификатор процесса] -o comm =
В нашем случае это было бы
ps -p 1823 -o comm =
Из вышеприведенного вывода мы можем найти имя процесса sshd по идентификатору процесса 1823. Это означает, что sshd с идентификатором процесса 1823 прослушивает порт 22.
В этой статье мы узнали о некоторых утилитах командной строки, которые можно использовать для просмотра того, какие порты прослушивает конкретный процесс.