0

ports

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

Однажды вам обязательно понадобится проверить используемый порт определенного сервиса (или наоборот, найти сервисы, слушающие конкретный порт) – в 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

Игра системный администратор

docker run -p 8080:8080 -p 3390:3389 –name play-adobe-flash-after-eol jchprj/play-adobe-flash-after-eolзайти localhost:8080, и открыть эту страницу, или https://serveradmin.ru/files/sysadmin.swf

Что делать, когда на сервере кончаются файловые дескрипторы (inode)

Нередки случаи, когда причиной проблем на сервере становится переполнение файловых дескрипторов (inode). Симптомы точно такие же, как при переполнившемся диске, только вот диск при этом может оказаться свободным. Количество inode каждой файловой системы определяется при разворачивании ОС.

CI/CD для начинающих: деплой React-приложения

Следующий шаг после разработки веб-приложения — размещение его на сервере. Независимо от сложности проекта или используемой инфраструктуры, общий процесс остается одинаковым: нужно «упаковать» код в CI/CD-конвейер и отправить на сервер. В тексте рассмотрим,

Настройка iptables в Linux от Selectel

Рассмотрим использование наиболее популярного в дистрибутивах Linux межсетевого экрана iptables. Эта инструкция — часть курса «Введение в сетевую безопасность». Смотреть весь курс Рассмотрим использование наиболее популярного в дистрибутивах Linux межсетевого экрана iptables

nginx и apache на одном сервере

В этом руководстве мы рассмотрим процедуру установки и настройки работы двух web-серверов с целью использования преимуществ каждого из них, где Nginx – как frontend и Apache – как backend. Установка и настройка
Go toTop