Поиск по сайту:

Как узнать, какая служба прослушивает определенный порт

В этом руководстве объясняется несколько различных способов определить, какая служба прослушивает определенный порт в Linux. Большинству из вас известен порт по умолчанию для популярных служб или процессов. Например, порт по умолчанию для Apache — 80, порт по умолчанию для FTP — 21, а порт по умолчанию для SSH — 22. Имена и номера портов в Linux можно найти, как описано в этом руководстве. Номера портов по умолчанию также можно изменить на любые пользовательские порты для защиты сервера Linux. Например, в следующих руководствах описывается, как изменить порт Apache, FTP и SSH по умолчанию на другой порт.

  • Как изменить порт Apache по умолчанию на собственный порт
  • Как изменить порт FTP по умолчанию на собственный порт
  • Как изменить порт SSH по умолчанию на собственный порт

Если номер порта по умолчанию будет изменен, как вы определите, какая служба какой порт прослушивает? Именно это мы сейчас и узнаем!

Найдите, какая служба прослушивает определенный порт в Linux

Ниже я перечислил четыре метода, позволяющие проверить, какая служба работает на определенном номере порта. Я буду продолжать обновлять этот список, если в будущем столкнусь с какими-либо новыми методами. Так что добавьте его в закладки и проверяйте время от времени.

Способ 1 — использование netstat

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

Netstat доступен в репозиториях по умолчанию большинства дистрибутивов Linux.

Чтобы установить его в Arch Linux и его вариантах, выполните:

sudo pacman -S net-tools

В Fedora, RHEL, CentOS, AlmaLinux и Rocky Linux:

sudo dnf install net-tools

В старых версиях RHEL и его клонах используйте yum вместо dnf.

sudo yum install net-tools

В Дебиане, Убунту:

sudo apt install net-tools

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

sudo netstat -tulpn

Пример вывода:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      665/systemd-resolve 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1026/sshd           
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      2068/python3        
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      1072/mysqld         
tcp6       0      0 :::22                   :::*                    LISTEN      1026/sshd           
tcp6       0      0 :::80                   :::*                    LISTEN      1062/apache2        
udp        0      0 127.0.0.53:53           0.0.0.0:*                           665/systemd-resolve 
udp        0      0 192.168.225.22:68       0.0.0.0:*                           647/systemd-network 
udp        0      0 192.168.225.53:68       0.0.0.0:*                           647/systemd-network 
udp6       0      0 fe80::a00:27ff:feff:546 :::*                                647/systemd-network 
udp6       0      0 fe80::a00:27ff:fe7e:546 :::*                                647/systemd-network

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

Как вы можете видеть, служба Python (в данном случае simpleHTTPserver) прослушивает порт номер 8000, служба mysqld прослушивает порт 3306, служба ssh работает на порту номер 22, apache2 работает на порту. 80 и так далее.

Здесь,

  • Флаг -t показывает TCP-соединения.
  • Флаг -u показывает соединения udp.
  • Флаг -l отображает прослушиваемые сокеты.
  • Флаг -p отображает идентификатор процесса (PID) и имя процесса, использующего этот порт.
  • Флаг -n отображает числовые адреса.

Приведенная выше команда перечисляет все службы и номера портов, которые они прослушивают. Что делать, если вы хотите узнать, какая служба прослушивает определенный порт? Вот тут-то и пригодится команда grep! Мы можем объединить команды netstat и grep для фильтрации вывода для конкретной службы, например mysqld, как показано ниже.

$ sudo netstat -tulpn | grep mysqld
[sudo] password for sk: 
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1076/mysqld

Видеть? Служба mysqld прослушивает порт номер 3306.

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

sudo netstat -tulpn | grep -w 3306
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1076/mysqld

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

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

sudo netstat -tulpn | grep -i 3306

Это так просто.

Более подробную информацию можно найти на страницах руководства.

man netstat

Netstat по большей части устарел. Альтернативой netstat является «ss».

Способ 2 — использование команды «ss»

Команда netstat устарела в последних версиях Linux, поэтому я рекомендую вам использовать "ss" вместо netstart.

ss — утилита командной строки для исследования сокетов. Это альтернатива netstat, и использование «ss» почти такое же, как и «netstat». Он предустановлен в Ubuntu и ее вариантах.

Чтобы узнать, какие службы какие порты прослушивают, выполните:

sudo ss -tulpn

Пример вывода:

Netid          State             Recv-Q            Send-Q                                            Local Address:Port                       Peer Address:Port                                                                                                                                                                                     
udp            UNCONN            0                 0                                                 127.0.0.53%lo:53                              0.0.0.0:*               users:(("systemd-resolve",pid=671,fd=12))                                                                                                                                
udp            UNCONN            0                 0                                         192.168.225.22%enp0s3:68                              0.0.0.0:*               users:(("systemd-network",pid=653,fd=17))                                                                                                                                
udp            UNCONN            0                 0                                         192.168.225.53%enp0s8:68                              0.0.0.0:*               users:(("systemd-network",pid=653,fd=25))                                                                                                                                
udp            UNCONN            0                 0                             [fe80::a00:27ff:fe7e:8a9c]%enp0s8:546                                [::]:*               users:(("systemd-network",pid=653,fd=24))                                                                                                                                
udp            UNCONN            0                 0                             [fe80::a00:27ff:feff:d2e0]%enp0s3:546                                [::]:*               users:(("systemd-network",pid=653,fd=22))                                                                                                                                
tcp            LISTEN            0                 80                                                    127.0.0.1:3306                            0.0.0.0:*               users:(("mysqld",pid=1076,fd=32))                                                                                                                                        
tcp            LISTEN            0                 128                                               127.0.0.53%lo:53                              0.0.0.0:*               users:(("systemd-resolve",pid=671,fd=13))                                                                                                                                
tcp            LISTEN            0                 128                                                     0.0.0.0:22                              0.0.0.0:*               users:(("sshd",pid=1015,fd=3))                                                                                                                                           
tcp            LISTEN            0                 128                                                           *:80                                    *:*               users:(("apache2",pid=1094,fd=4),("apache2",pid=1090,fd=4),("apache2",pid=1089,fd=4),("apache2",pid=1088,fd=4),("apache2",pid=1087,fd=4),("apache2",pid=1062,fd=4))      
tcp            LISTEN            0                 128                                                        [::]:22                                 [::]:*               users:(("sshd",pid=1015,fd=4))

Узнайте, какие службы какие порты прослушивают, с помощью команды ss в Linux

Чтобы отфильтровать вывод для определенной службы (например, mysqld), используйте:

sudo ss -tulpn | grep -w mysqld
tcp LISTEN 0 80 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=1076,fd=32))

Более подробную информацию можно найти на страницах руководства.

man ss

Метод 3 — Использование lsof

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

Чтобы установить его в Linux, используйте следующие команды в зависимости от типа используемого вами дистрибутива.

В Арч Линукс:

sudo pacman -S lsof

В Дебиане, Убунту:

sudo apt install lsof

В CentOS RHEL:

sudo yum install lsof

В Федоре:

sudo dnf install lsof

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

sudo lsof -i :80

Пример вывода:

COMMAND  PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
apache2 1062     root    4u  IPv6  20452      0t0  TCP *:http (LISTEN)
apache2 1087 www-data    4u  IPv6  20452      0t0  TCP *:http (LISTEN)
apache2 1088 www-data    4u  IPv6  20452      0t0  TCP *:http (LISTEN)
apache2 1089 www-data    4u  IPv6  20452      0t0  TCP *:http (LISTEN)
apache2 1090 www-data    4u  IPv6  20452      0t0  TCP *:http (LISTEN)
apache2 1094 www-data    4u  IPv6  20452      0t0  TCP *:http (LISTEN)

Найдите, какая служба прослушивает определенный порт, с помощью команды lsof

Более подробную информацию можно найти на страницах руководства.

man lsof

Способ 4. Использование команды фьюзера

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

Он также доступен в репозиториях по умолчанию большинства дистрибутивов Linux.

Чтобы установить его в Arch Linux, запустите:

sudo pacman -S psmisc

В Дебиане, Убунту:

sudo apt install psmisc

В CentOS RHEL:

sudo yum install psmisc

В Федоре:

sudo dnf install psmisc

Сначала нам нужно найти PID службы или процесса, прослушивающего определенный порт. Например, я собираюсь найти PID процесса, прослушивающего порт 3306, с помощью команды:

sudo fuser 3306/tcp

Вы увидите результат, как показано ниже.

3306/tcp: 1076

Здесь 1076 — это PID.

А затем узнайте фактический процесс, используя PID, используя команду:

ps -p 1076 -o comm=
mysqld

Альтернативно вы можете использовать флаг -v для просмотра полной информации с помощью одной команды.

$ sudo fuser -v 3306/tcp
                     USER        PID ACCESS COMMAND
3306/tcp:            mysql      1076 F.... mysqld

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

Для получения более подробной информации просмотрите справочные страницы.

man fuser

Заключение

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

Статьи по данной тематике