В этом руководстве объясняется несколько разных способов узнать, какая служба прослушивает определенный порт в 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 :::*
$ 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
Способ 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
$ 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
$ sudo fuser 3306/tcp
Вы увидите вывод:
3306/tcp: 1076
1076 – это PID.
А затем выясните фактический процесс, используя PID с помощью команды:
$ ps -p 1076 -o comm= mysqld
$ sudo fuser -v 3306/tcp USER PID ACCESS COMMAND 3306/tcp: mysql 1076 F.... mysqld
$ man fuser