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

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

Мануал

В этом руководстве объясняется несколько разных способов узнать, какая служба прослушивает определенный порт в Linux.

Большинство из вас знает порт по умолчанию для популярных служб или процессов

Например, порт Apache по умолчанию – 80, порт FTP по умолчанию – 21, а порт SSH по умолчанию – 22.

Вы можете найти имена и номера портов в Linux, как описано в этом руководстве.

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

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

Вот что мы собираемся выяснить сейчас!

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

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

Я буду продолжать обновлять этот список, если буду сталкиваться с любыми новыми методами в будущем.

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

Метод 1 – Использование netstat

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

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

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

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

$ sudo pacman -S net-tools

На CentOS, RHEL:

$ sudo yum install net-tools

На Fedora:

$ sudo dnf install net-tools

На Debian, Ubuntu:

$ sudo apt install net-tools
После установки выполните следующую команду, чтобы узнать, какие службы прослушивают какие порты:
$ 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 :::*

Приведенная выше команда перечисляет все службы и номера портов, которые они прослушивают.
Что если вы хотите узнать, какая служба прослушивает определенный порт?
Здесь пригодится команда 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»

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
Чтобы отфильтровать выходные данные для конкретной службы (например, 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, используйте следующие команды в зависимости от используемого типа дистрибутива.

На Arch Linux:

$ sudo pacman -S lsof

На Debian, Ubuntu:

$ sudo apt install lsof

На CentOS, RHEL:

$ sudo yum install lsof

На Fedora:

$ 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)
Для более подробной информации обратитесь к справочным страницам.
$ man lsof

Метод 4 – Использование команды fuser

fuser – это еще одна утилита командной строки для идентификации процессов с использованием файлов или сокетов.

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

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

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

$ sudo pacman -S psmisc

На Debian, Ubuntu:

$ sudo apt install psmisc

На CentOS, RHEL:

$ sudo yum install psmisc

На Fedora:

$ 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
Для более подробной информации, обратитесь к страницам руководства.
$ man fuser

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий