Чем слушается порт linux

Найти процесс по номеру порта в Linux

При работе в Unix-системах мне частенько приходится определять, какой процесс занимает порт, например, чтобы остановить его и запустить на нём другой процесс. Поэтому я решил написать эту небольшую статью, чтоб каждый, прочитавший её, мог узнать, каким процессом занят порт в Ubuntu, CentOS или другой ОС из семейства Linux.

Как же вычислить, какие запущенные процессы соотносятся с занятыми портами? Как определить, что за процесс открыл udp-порт 2222, tcp-порт 7777 и т.п.? Получить подобную информацию мы можем нижеперечисленными методами:

netstat утилита командной строки, показывающая сетевые подключения, таблицы маршрутизации и некоторую статистику сетевых интерфейсов; fuser утилита командной строки для идентификации процессов с помощью файлов или сокетов; lsof утилита командной строки, отображающая информацию об используемых процессами файлах и самих процессах в UNIX-системе; /proc/$pid/ в ОС Linux /proc для каждого запущенного процесса содержит директорию (включая процессы ядра) в /proc/$PID с информацией об этом процессе, в том числе и название процесса, открывшего порт.

Использование вышеперечисленных способов может потребовать права супер-пользователя.

Теперь давайте рассмотрим каждый из этих способов по отдельности.

Пример использования netstat

Введём в командную строку команду:

Получим примерно такой результат:

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:10843 0.0.0.0:* LISTEN 7023/node tcp 0 0 127.0.0.1:4942 0.0.0.0:* LISTEN 3413/java .

Из вывода видно, что 4942-й порт был открыт Java-приложением с PID’ом 3413. Проверить это можно через /proc :

Примерный результат выполнения команды:

lrwxrwxrwx. 1 user user 0 Nov 10 20:31 /proc/3413/exe -> /opt/jdk1.8.0_60/bin/java

При необходимости получения информации по конкретному порту (например, 80-му, используемого обычно для HTTP) вместо отображения всей таблицы можно grep -ануть результат:

Результат будет примерно такой:

tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1607/apache2

Пример использования fuser

Для того, чтобы вычислить процесс, занимающий порт 5050, введём команду:

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

Пример использования lsof

При использовании lsof введите команду по одному из шаблонов:

lsof -i :$portNumber lsof -i tcp:$portNumber lsof -i udp:$portNumber

Пример реального использования:

apache2 2123 root 3u IPv4 6472 0t0 TCP *:www (LISTEN) apache2 2124 www-data 3u IPv4 6472 0t0 TCP *:www (LISTEN) apache2 2125 www-data 3u IPv4 6472 0t0 TCP *:www (LISTEN) apache2 2126 www-data 3u IPv4 6472 0t0 TCP *:www (LISTEN)

После этого мы можем получить более полную информацию о процессах с PID’ами 2123, 2124 и т.д..

На выходе получим примерно следующее:

www-data 2124 0.0 0.0 36927 4991 ? S 10:20 0:00 /usr/sbin/apache2 -k start

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

$ ps -eo pid,user,group,args,etime,lstart | grep '2727'
2727 www-data www-data /usr/sbin/apache2 -k start 14:27:33 Mon Nov 30 21:21:28 2015

В этом выводе можно выделить следующие параметры:

  • 2727 — PID;
  • www-date — имя пользователя владельца;
  • www-date — название группы;
  • /usr/sbin/apache2 -k start — название команды с аргументами;
  • 14:27:33 — время работы процесса в формате [[дд-]чч:]мм:сс;
  • Mon Nov 30 21:21:28 2015 — время старта процесса.
Читайте также:  Linux commands in windows shell

Надеюсь, у меня получилось доступно объяснить, как определить процесс по порту в Linux-системах, и теперь у вас ни один порт не останется неопознанным!

Источник

Кто слушает порт в Linux

Открытый доступ к порту хоть и является угрозой безопасности системы, но по сути ничего плохого не представляет до тех пор, пока его не начинает использовать программа. А чтобы выяснить какая программа слушает какой порт можно использовать утилиты «netstat» (или «ss») и «lsof».

Чтобы узнать информацию о программе, которая прослушивает определённый порт, можно воспользоваться командой «lsof» со следующими ключами:

Здесь «номер_порта» — это цифра.

Пример результата выполнения команды с 53 портом:

$: sudo lsof -i :53 COMMAND PID USER TYPE NODE NAME systemd-r 818 systemd-resolve IPv4 UDP localhost:domain systemd-r 818 systemd-resolve IPv4 TCP localhost:domain (LISTEN)

Но рекомендуем чаще запускать команду для получения списка программ, которые используют какие-либо tcp/udp порты. В этом помогает «netstat» или «ss»:

  • -l показать только прослушиваемые «LISTEN» порты.
  • -n показывать адреса как ip, а не пытаться определять домены.
  • -t показывать TCP порты.
  • -u показывать UDP порты.
  • -p показать название программы, которая слушает порт.
$: sudo netstat -lntup Prt Local Addr State PID/Program tcp 0.0.0.0:443 LISTEN 204/nginx tcp 0.0.0.0:80 LISTEN 202/nginx tcp 0.0.0.0:22 LISTEN 174/sshd udp 127.0.0.1:323 233/chronyd

По результату можно заметить какая программа прослушивает какой порт. Если ip в секции «Local Address» равен «127.0.0.1», то это локальное обращение. Такой порт можно не закрывать фаерволом — он и так не будет доступен извне. Но ip с нулями «0.0.0.0» говорят о том, что программа слушает все адреса. То есть она примет любой запрос, в том числе внешний.

Источник

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

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

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

Что такое порт прослушивания

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

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

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

Читайте также:  Nvidia gtx установить linux

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

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

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

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

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

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

  • -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 , введите:

Результат почти такой же, как у 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 — номер порта.
Читайте также:  Astra linux офисные приложения

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

Выводы

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

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

Источник

Какой процесс слушает порт в Linux?

date

17.05.2023

user

itpro

directory

Linux

comments

Комментариев пока нет

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

Можно получить информацию о процесс, который слушает определенный порт командой:

В этом примере видно, что порт 8000 занят процессом python3.

lsof - найти процесс, который занял порт в linux

Можно вывести список всех запущенных процессов Linux, который используют любые TCP/UDP порты:

$ sudo netstat -lntup| grep LISTEN

Мы используем следующие ключи:

  • -l – показать тольо прослушиваемые порты
  • -n – показать IP адреса и номера портов в числовом виде и не пытаться их резолвить (соответствие номеров портов и название служб содержится в файле /etc/services)
  • -t – показать открытые TCP порты
  • -u – показать UDP порты
  • -p – показать название процесс, который прослушивает порт

netstat -lntup- список открытых сокетов в linux

Мы нашли PID процесса ( 72005 ), который использует порт и теперь можно вывести информацию о том, как он запущен:

найти команду, которая запустила процесс

В этом примере видно, что процесс запущен вручную пользователем root с помощью команды python3 -m http.server (используется для запуска простого HTTP сервера на python для публикации текущего каталога).

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

Проверьте, что порт теперь свободен:

Предыдущая статьяПредыдущая статья Следующая статья Следующая статья

page

page

page

Установка и настройка прокси сервера Squid в Linux

Настройка Wi-Fi точки доступа на Linux

Мониторинг срока регистрации (освобождения) домена в Zabbix

Управление конфигурацией Windows через Ansible

Источник

Оцените статью
Adblock
detector