Как проверить используемые (открытые) порты в Linux

12 set 2022 4 min di lettura
Как проверить используемые (открытые) порты в Linux
Indice dei contenuti

Введение

При попытке устранить проблемы с сетевым подключением или проблемы, связанные с конкретными приложениями, в первую очередь следует проверить (проверить), какие порты фактически используются в системе и какие приложения прослушивают определенный порт.

В этой статье объясняется, как узнать и контролировать, какие службы прослушивают порты, используя команды netstat, sse и lsof. Инструкции применимы ко всем операционным системам на базе Linux и Unix, таким как macOS.

Используемые порты

Сетевой порт идентифицируется по его номеру, соответствующему IP-адресу и типу протокола связи, например TCP или UDP.

Порт прослушивания — это сетевой порт, на котором прослушивается приложение или процесс, который действует как конечная точка связи.

Каждый порт прослушивания может быть открыт или закрыт (фильтрован) с помощью брандмауэра. В общих чертах, открытый порт — это сетевой порт, который принимает входящие пакеты из удаленных мест.

У вас не может быть двух служб, прослушивающих один и тот же порт на одном и том же IP-адресе.

Например, если вы используете веб-сервер Apache, прослушивающий порты 80 и 443 и пытающийся установить Nginx, следующая загрузка завершится ошибкой, поскольку порты HTTP и HTTPS уже используются.

Проверьте прослушиваемые порты с помощью netstat

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

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

sudo netstat -tunlp

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

  • -t - Показать порты TCP.
  • -u - Показать порты UDP.
  • -n — показывать числовые адреса вместо разрешения хостов.
  • -l - Показать только прослушиваемые порты.
  • -p - Показать PID и имя процесса. Эта информация отображается только в том случае, если вы запускаете команду от имени пользователя root или sudo.

Вывод будет выглядеть следующим образом:

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 5469/systemd-resolv
 tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1304/sshd
 tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 21662/mysqld
 tcp6 0 0:::22:::* LISTEN 1304/sshd
 udp 0 0 127.0.0.53:53 0.0.0.0:* 5469/systemd-resolv
 udp 0 0 0.0.0.0:68 0.0.0.0:* 811/dhclient

Важными столбцами в нашем случае являются:

  • Proto — протокол, используемый сокетом.
  • Локальный адрес — IP-адрес и номер порта, на котором прослушивается процесс.
  • PID/имя программы — PID и имя процесса.

Если вы хотите отфильтровать результаты, используйте команду grep. Например, чтобы узнать, какой процесс прослушивает TCP-порт 22, введите:

sudo netstat -tnlp | grep:22

Вывод показывает, что на этой машине порт 22 используется сервером SSH:

tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1304/sshd
 tcp6 0 0:::22:::* LISTEN 1304/sshd

Если вывод пуст, порт ничего не прослушивает.

Вы также можете отфильтровать список на основе таких критериев, как PID, протокол, статус и т. д.

netstat устарел и заменен на ss и ip, но по-прежнему является одной из наиболее часто используемых команд для проверки сетевых подключений.

Проверьте порты прослушивания с помощью ss

ssэто новый netstat. Ему не хватает некоторых функций netstat, но он предоставляет больше состояний TCP и немного быстрее. Опции команды в основном одинаковые, так что переключиться с netstat на ss не составит труда.

Чтобы получить список всех прослушиваемых портов, введите ss:

sudo ss -tunlp

Вывод аналогичен тому, что сообщает netstat:

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=5469,fd=12))
 udp UNCONN 0 0 0.0.0.0:68 0.0.0.0:* users:(("dhclient",pid=811,fd=6))
 tcp LISTEN 0 128 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=5469,fd=13))
 tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1304,fd=3))
 tcp LISTEN 0 80 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=21662,fd=28))
 tcp LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=1304,fd=4))

Проверьте порты прослушивания с помощью lsof

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

В Linux все является файлом. Вы можете думать о сокете как о файле, который записывается по сети.

Чтобы получить список всех прослушиваемых TCP-портов с помощью команды lsof:

sudo lsof -nP -iTCP -sTCP:LISTEN

Используемые варианты следующие:

  • -n — не преобразовывать номера портов в имена портов.
  • -p - Не разрешать имена хостов, показывать числовые адреса.

-iTCP -sTCP: LISTEN - Показать только сетевые файлы со статусом TCP LISTEN.

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
 sshd 1304 root 3u IPv4 19961 0t0 TCP *:22 (LISTEN)
 sshd 1304 root 4u IPv6 19976 0t0 TCP *:22 (LISTEN)
 systemd-r 5469 systemd-resolve 13u IPv4 3618073 0t0 TCP 127.0.0.53:53 (LISTEN)
 mysqld 21662 mysql 28u IPv4 46021 0t0 TCP 127.0.0.1:3306 (LISTEN)

Большинство имен выходных столбцов говорят сами за себя:

  • COMMAND, PID, USER — имя, PID и пользователь, запускающий программу, связанную с портом.
  • ИМЯ — номер порта.

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

sudo lsof -nP -iTCP:3306 -sTCP:LISTEN

Вывод показывает, что порт 3306 используется сервером MySQL:

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
 mysqld 21662 mysql 28u IPv4 46021 0t0 TCP 127.0.0.1:3306 (LISTEN)

Для получения дополнительной информации посетите справочную страницу lsof и ознакомьтесь со всеми другими мощными опциями этого инструмента.

Вывод

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

Support us with a

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.