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

Проверьте открытые порты в Linux

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

В этой статье объясняется, как использовать команды netstat , ss и 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 .

Вывод будет выглядеть примерно так:

 Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 445/sshd tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 929/master tcp6 0 0 :::3306 :::* LISTEN 534/mysqld tcp6 0 0 :::80 :::* LISTEN 515/apache2 tcp6 0 0 :::22 :::* LISTEN 445/sshd tcp6 0 0 :::25 :::* LISTEN 929/master tcp6 0 0 :::33060 :::* LISTEN 534/mysqld udp 0 0 0.0.0.0:68 0.0.0.0:* 966/dhclient

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

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

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

 sudo netstat -tnlp | grep :22

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

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

Если вывод пустой, это означает, что порт никто не прослушивает.

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

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

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

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

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

 sudo ss -tunlp

Вывод почти такой же, как тот, который выдает netstat :

 State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=445,fd=3)) LISTEN 0 100 0.0.0.0:25 0.0.0.0:* users:(("master",pid=929,fd=13)) LISTEN 0 128 *:3306 *:* users:(("mysqld",pid=534,fd=30)) LISTEN 0 128 *:80 *:* users:(("apache2",pid=765,fd=4),("apache2",pid=764,fd=4),("apache2",pid=515,fd=4)) LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=445,fd=4)) LISTEN 0 100 [::]:25 [::]:* users:(("master",pid=929,fd=14)) LISTEN 0 70 *:33060 *:* users:(("mysqld",pid=534,fd=33))

Проверьте порты прослушивания с помощью 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 445 root 3u IPv4 16434 0t0 TCP *:22 (LISTEN) sshd 445 root 4u IPv6 16445 0t0 TCP *:22 (LISTEN) apache2 515 root 4u IPv6 16590 0t0 TCP *:80 (LISTEN) mysqld 534 mysql 30u IPv6 17636 0t0 TCP *:3306 (LISTEN) mysqld 534 mysql 33u IPv6 19973 0t0 TCP *:33060 (LISTEN) apache2 764 www-data 4u IPv6 16590 0t0 TCP *:80 (LISTEN) apache2 765 www-data 4u IPv6 16590 0t0 TCP *:80 (LISTEN) master 929 root 13u IPv4 19637 0t0 TCP *:25 (LISTEN) master 929 root 14u IPv6 19638 0t0 TCP *:25 (LISTEN)

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

  • COMMAND , PID , USER — имя, pid и пользователь, запустивший программу, связанную с портом.
  • NAME — Номер порта.

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

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

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

 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME mysqld 534 mysql 30u IPv6 17636 0t0 TCP *:3306 (LISTEN)

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

Заключение

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

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

Терминал

Связанные руководства

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *