0

ports

Проверка занятости порта сервисом в Linux

09.02.2023

Однажды вам обязательно понадобится проверить используемый порт определенного сервиса (или наоборот, найти сервисы, слушающие конкретный порт) – в Linux существует несколько утилит командной строки, которые могут с этим помочь. Давайте разберемся!

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

Устанавливается данная утилита в разных дистрибутивах по-разному, например, для RedHat и CentOS:

sudo yum install net-tools

Fedora 22+:

dnf install net-tools

Debian/Ubuntu:

sudo apt-get install net-tools

Для вывода детальной информации о всех TCP и UDP ендпоинтах можно воспользоваться следующей командой:

netstat -pnltu

Вывод будет примерно следующим:

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      1323/systemd-resolv
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1661/sshd
tcp        0      0 127.0.0.1:17123         0.0.0.0:*               LISTEN      1753/python
tcp6       0      0 :::31341                :::*                    LISTEN      30068/java
tcp6       0      0 :::22222                :::*                    LISTEN      30068/java
tcp6       0      0 :::80                   :::*                    LISTEN      30068/java
tcp6       0      0 :::10769                :::*                    LISTEN      126755/docker-proxy
tcp6       0      0 :::10770                :::*                    LISTEN      129459/docker-proxy
tcp6       0      0 :::10771                :::*                    LISTEN      129540/docker-proxy
tcp6       0      0 :::10772                :::*                    LISTEN      130172/docker-proxy
tcp6       0      0 :::10773                :::*                    LISTEN      130187/docker-proxy
tcp6       0      0 :::10774                :::*                    LISTEN      130545/docker-proxy
tcp6       0      0 :::22                   :::*                    LISTEN      1661/sshd
tcp6       0      0 :::10775                :::*                    LISTEN      7406/docker-proxy

Здесь:

  • -p – вывод ID процесса и его имени;
  • -n – вывод адресов;
  • -l – вывод сокетов;
  • -t – вывод TCP соединений;
  • -u – вывод UDP соединений.

Найти сервис, запущенный на определенном порту можно так:

netstat -pnltu | grep -i "22"

Аналогично можно найти на каком порту запущен определенный сервис:

netstat -pnltu | grep -i "sshd"

Также для наших целей подойдет утилита командной строки fuser. По умолчанию она не установлена в большинстве операционных систем, чтобы установить ее в Centos/RedHat делаем так:

yum install psmisc

Fedora 22+

dnf install psmisc

Debian/Ubuntu

apt-get install psmisc

Например, чтобы найти идентификаторы процессов (PIDs), запущенных на 80-м порту, выполняем команду:

fuser 22/tcp

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

22/tcp:               1661 105268 105302

Далее можем найти имя процесса по его идентификатору (PID):

ps -p 1661 -o comm=

Результат:

sshd

Еще один способ – использование утилиты lsof. Установка ее в RedHat/CentOS выглядит так:

yum install lsof

Fedora 22+

dnf install lsof

Debian/Ubuntu:

apt-get install lsof

Вывод всех активных TCP и UPD соединений:

lsof -i

Результатом будет примерно следующее:

COMMAND      PID            USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
systemd-r   1323 systemd-resolve   12u  IPv4     20197      0t0  UDP 127.0.0.53:domain
systemd-r   1323 systemd-resolve   13u  IPv4     20198      0t0  TCP 127.0.0.53:domain (LISTEN)
sshd        1661            root    3u  IPv4     29741      0t0  TCP *:ssh (LISTEN)
sshd        1661            root    4u  IPv6     29743      0t0  TCP *:ssh (LISTEN)
python      1754        dd-agent    4u  IPv6     39499      0t0  UDP localhost.localdomain:8125
docker-pr   7406            root    4u  IPv6 287933991      0t0  TCP *:10775 (LISTEN)
docker-pr   7459            root    4u  IPv6 287906596      0t0  TCP *:10776 (LISTEN)
docker-pr   7792            root    4u  IPv6 287937795      0t0  TCP *:10777 (LISTEN)
docker-pr   8435            root    4u  IPv6 287955267      0t0  TCP *:10778 (LISTEN)
docker-pr   8447            root    4u  IPv6 287915222      0t0  TCP *:10779 (LISTEN)
docker-pr   9060            root    4u  IPv6 287891442      0t0  TCP *:10780 (LISTEN)
docker-pr   9429            root    4u  IPv6 287957044      0t0  TCP *:10781 (LISTEN)
docker-pr   9463            root    4u  IPv6 287921075      0t0  TCP *:10782 (LISTEN)
ntpd       10594             ntp   16u  IPv6  35365570      0t0  UDP *:ntp

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

lsof -i :22

Результат:

COMMAND    PID   USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
sshd      1661   root    3u  IPv4     29741      0t0  TCP *:ssh (LISTEN)
sshd      1661   root    4u  IPv6     29743      0t0  TCP *:ssh (LISTEN)

Напоследок можно также воспользоваться утилитой whatportis. Ее установка в RedHat/Centos требует чуть больше действий:

yum install epel-release
yum install python34-setuptools
easy_install-3.4 pip
pip install whatportis

В Debian/Ubuntu все гораздо проще:

apt install python-pip
pip install whatportis

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

whatportis [номер_порта | имя_сервиса]

Если вам неизвестно точное имя сервиса, можно воспользоваться опцией --like, например:

whatportis ssh --like

Также доступен вывод информации в json-формате:

whatportis 22 --json

Свежие комментарии

Подписка

Лучшие статьи

Рубрики

Популярное

mail
Previous Story

Миграция на Zimbra при помощи imapsync

asterisk
Next Story

Миграция с SIP на PJSIP в Asterisk

Latest from Blog

Настройка и использование Redis

В этой статье мы расскажем что такое Redis, его преимущества и для каких целей он используется. Redis (REmote DIctionary Server) — сетевое журналируемое хранилище данных типа “ключ” — “значение” с открытым исходным кодом. По сути Redis представляет собой базу данных

Настройка и использование Memcached

В статье мы расскажем, что такое Memcache, зачем он нужен и как он влияет на работу некоторых популярных CMS. Кеширование данных – немаловажный момент в работе любого веб-проекта. С ростом посещаемости увеличиваются требования к

Как настроить логирование и ротацию логов Nginx

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

Распределение выполнения запросов внутри приватной сети VPS через HAProxy

Приватную сеть можно использовать для распределения выполнения загрузки и балансировки запросов между несколькими серверами. Рассмотрим организацию такой балансировки на примере HAProxy – бесплатного ПО, предназначенного для распределения нагрузки и организации проксирования TCP-пакетов между несколькими обслуживающими

Использование MySQL на отдельном сервере с приватной сетью VPS

Приватную сеть – функционал, доступный пользователям VPS – можно использовать для вынесения MySQL на отдельный сервер. В этом случае веб-сервер обрабатывает запросы от клиентов и через приватное подключение обменивается данными с базой. Это
Go toTop