- Linux. Кто сидит на портах?
- Узнать название программы через занимаемый порт
- Найти процесс по номеру порта в Linux
- Пример использования netstat
- Пример использования fuser
- Пример использования lsof
- Как проверить используется ли порт в Linux ?
- Как узнать занят ли порт в Linux
- Получение списка всех открытых портов в работе
- Заключение
- 11 примеров использования netstat
- 1. Список всех портов (как прослушиваемых, так и нет)
- 2. Список сокетов, находящихся в состоянии LISTEN
- 3. Просмотр статистики для каждого протокола
- 4. Отображение PID и имени процесса в выводе netstat
- 5. Разрешение имён в выводе netstat
- 6. Вывод информации netstat непрерывно
- 7. Неподдерживаемые системой семейства адресов
- 8. Маршрутизация ядра
- 9. Соответствие портов и процессов
- 10. Сетевые интерфейсы
- 11. netstat -lnptux
- Проверка занятости порта сервисом в Linux
- Oct 4, 2018 06:09 · 637 words · 3 minute read lsof netstat fuser tips
Linux. Кто сидит на портах?
Дата 11.10.2020 Автор Alex Рубрика Интернет
Контроль всех входов и выходов — это основа безопасности. Поэтому для определения уровня защищённости машины стоит первым делом проверить наличие открытых портов. Если они есть, то определить какие именно программы открывают эти порты. Попробуем это сделать.
Для получения списка открытых портов используем утилиту «netstat», которая показывает все TCP/UDP входящие/исходящие соединения. Выполним следующую команду от лица суперпользователя:
В этой команде используется пять ключей, чтобы сформировать список только из тех портов, которые прослушиваются, и распечатать названия программ, которые это делают. Разберём все ключи:
-l показать только прослушиваемые «LISTEN» порты
-n показывать сетевые адреса как ip адреса (числа), а не пытаться определять домены
-t показывать TCP порты
-u показывать UDP порты
-p показывать программу, которая слушает порт
При проверке портов обращайте внимание на ip адрес порта. Если он 127.0.0.*, то это внутренний адрес вашего устройства. То есть извне нельзя получить к нему доступ. К примеру, не стоит беспокоиться, если увидите процесс systemd-resolve по адресу 127.0.0.53:53. Этот процесс обслуживает DNS кеш устройства. Не удаляйте его, он нужен для работы интернета.
Но если вы видите порты с ip адресом «0.0.0.0» или «::», то к этим портам можно получить доступ извне. Но только если настроено правило в фаерволе.
Сейчас на замену «netstat» приходит утилита «ss». Ключи у них совпадают, поэтому можно писать:
Узнать название программы через занимаемый порт
Если нужно узнать название программы, которая занимает определённый порт, то можно получить его с помощью команды:
Источник
Найти процесс по номеру порта в Linux
При работе в Unix-системах мне частенько приходится определять, какой процесс занимает порт, например, чтобы остановить его и запустить на нём другой процесс. Поэтому я решил написать эту небольшую статью, чтоб каждый, прочитавший её, мог узнать, каким процессом занят порт в Ubuntu, CentOS или другой ОС из семейства Linux.
Как же вычислить, какие запущенные процессы соотносятся с занятыми портами? Как определить, что за процесс открыл udp-порт 2222, tcp-порт 7777 и т.п.? Получить подобную информацию мы можем нижеперечисленными методами:
netstat утилита командной строки, показывающая сетевые подключения, таблицы маршрутизации и некоторую статистику сетевых интерфейсов; fuser утилита командной строки для идентификации процессов с помощью файлов или сокетов; lsof утилита командной строки, отображающая информацию об используемых процессами файлах и самих процессах в UNIX-системе; /proc/$pid/ в ОС Linux /proc для каждого запущенного процесса содержит директорию (включая процессы ядра) в /proc/$PID с информацией об этом процессе, в том числе и название процесса, открывшего порт.
Использование вышеперечисленных способов может потребовать права супер-пользователя.
Теперь давайте рассмотрим каждый из этих способов по отдельности.
Пример использования netstat
Введём в командную строку команду:
Получим примерно такой результат:
Из вывода видно, что 4942-й порт был открыт Java-приложением с PID’ом 3413. Проверить это можно через /proc :
Примерный результат выполнения команды:
При необходимости получения информации по конкретному порту (например, 80-му, используемого обычно для HTTP) вместо отображения всей таблицы можно grep -ануть результат:
Результат будет примерно такой:
Пример использования fuser
Для того, чтобы вычислить процесс, занимающий порт 5050, введём команду:
И получим результат:
Аналогичным образом, как мы делали выше, можно посмотреть процесс в его директории /proc/$PID , в которой можно найти много интересной дополнительной информации о процессе, такую как рабочая директория процесса, владелец процесса и т.д., но это выходит за рамки этой статьи.
Пример использования lsof
При использовании lsof введите команду по одному из шаблонов:
Пример реального использования:
После этого мы можем получить более полную информацию о процессах с PID’ами 2123, 2124 и т.д..
На выходе получим примерно следующее:
Получить информацию о процессе также можно следующим проверенным способом:
В этом выводе можно выделить следующие параметры:
- 2727 — PID;
- www-date — имя пользователя владельца;
- www-date — название группы;
- /usr/sbin/apache2 -k start — название команды с аргументами;
- 14:27:33 — время работы процесса в формате [[дд-]чч:]мм:сс;
- Mon Nov 30 21:21:28 2015 — время старта процесса.
Надеюсь, у меня получилось доступно объяснить, как определить процесс по порту в Linux-системах, и теперь у вас ни один порт не останется неопознанным!
Источник
Как проверить используется ли порт в Linux ?
Сетевой порт в Linux – это не что иное, как число, обозначающее одну из сторон соединения между двумя системами. Все сетевые устройства используют номера портов, чтобы определить, какому процессу следует доставить сообщение. Доменное имя и IP-адрес можно сравнить с уличными адресами, а номера портов – с номерами комнат.
Популярные номера портов в Linux:
- HTTP – TCP 80
- HTTPS – TCP 443
- POP3 – TCP 110
- SMTP – TCP 25
- SSH – TCP 22
- DNS/DOMAIN – TCP/UDP 53
Используйте следующие команды для вывода номеров всех портов:
Как узнать занят ли порт в Linux
Откроем окно терминала и наберём одну из следующих команд:
Теперь рассмотрим один из примеров более детально. С помощью команды ss или netstat проверим используется ли TCP порт 443 в нашей системе
Если порт используется, то вывод будет таким
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 3183/nginx: master
В нашем примере порт 443 используется сервисом Nginx. Ключи:
- -t : показывает TCP сокет/порт
- -u : показывает UDP сокет/порт
- -l : показывает только открытые порты
- -p : показывает название процесса который открыл сокет/порт
- -n : просмотреть адреса и номера портов в числовом формате.
Получение списка всех открытых портов в работе
Получите примерно следующее:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 3146/php-fpm: maste
tcp 0 0 0.0.0.0:587 0.0.0.0:* LISTEN 3150/exim
tcp 0 0 0.0.0.0:333 0.0.0.0:* LISTEN 3183/nginx: master
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3183/nginx: master
tcp 0 0 0.0.0.0:465 0.0.0.0:* LISTEN 3150/exim
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 3161/pure-ftpd (SER
tcp 0 0 0.0.0.0:33333 0.0.0.0:* LISTEN 3142/sshd
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 3150/exim
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 3183/nginx: master
Заключение
Вы научились определять, используется ли тот или иной порт в системе под управлением Linux, с помощью различных утилит командной строки.
Источник
11 примеров использования netstat
Команда netstat, входящая в стандартный набор сетевых инструментов UNIX, отображает различную network–related информацию, такую как сетевые подключения, статистику интерфейсов, таблицы маршрутизации, masquerade, multicast, и т.п.
В этой статье рассмотрим десять практических примеров использования команды netstat в Linux.
1. Список всех портов (как прослушиваемых, так и нет)
Перечислить все порты: netstat -a
Перечислить все TCP порты: netstat -at
Перечислить все UDP порты: netstat -au
2. Список сокетов, находящихся в состоянии LISTEN
Перечислить все прослушиваемые порты: netstat -l
Перечислить прослушиваемые TCP порты: netstat -lt
Перечислить прослушиваемые UDP порты: netstat -lu
Перечислить прослушиваемые UNIX сокеты: netstat -lx
3. Просмотр статистики для каждого протокола
Показать статистику всех портов: netstat -s
Показать статистику только TCP портов: netstat -st
Показать статистику только UDP портов: netstat -su
4. Отображение PID и имени процесса в выводе netstat
Опция netstat -p добавит «PID/Program Name» в вывод netstat, и может быть совмещена с любым другим набором опций. Это очень полезно при отладке, для определения того, какая программа работает на определённом порту.
5. Разрешение имён в выводе netstat
Когда вам не нужно резолвить имя хоста, имя порта, имя пользователя, используйте опцию netstat -n для вывода значений в цифровом формате. Команда покажет IP-адрес вместо хоста, номер порта вместо имени порта, UID вместо имени пользователя.
Это также ускорит вывод, так как netstat не станет выполнять ненужный поиск.
Для вывода цифровых значений только некоторых из этих пунктов, используйте следующие команды:
6. Вывод информации netstat непрерывно
Опция netstat -c будет выводить информацию непрерывно, в стиле top, обновляя экран каждые несколько секунд.
7. Неподдерживаемые системой семейства адресов
Опция netstat —verbose покажет подробный вывод, а в самом конце отобразит неподдерживаемые Address Family.
8. Маршрутизация ядра
Показать таблицу маршрутизации ядра: netstat -r
Примечание: Используйте netstat -rn для просмотра маршрута в цифровом формате без разрешения имён узлов.
9. Соответствие портов и процессов
Узнать, какой порт занимает определённая программа:
Выяснить, каким процессом используется определённый порт:
10. Сетевые интерфейсы
Показать список сетевых интерфейсов: netstat -i
Показать расширенную информацию об интерфейсах (аналогично ifconfig): netstat -ie
11. netstat -lnptux
Резюмируем вышеописанное и объединим ключи в одну полезную команду, которая покажет:
- -l все открытые порты (LISTEN)
- -t по протоколу TCP
- -u по протоколу UDP
- -x по протоколу UNIX Socket
- -n без резолва IP/имён
- -p но с названиями процессов и PID-ами
Примечание: Не все процессы могут быть идентифицированы последним ключом, чужие процессы показаны не будут. Вы должны иметь права root чтобы увидеть всё.
Источник
Проверка занятости порта сервисом в Linux
Oct 4, 2018 06:09 · 637 words · 3 minute read lsof netstat fuser tips
Однажды вам обязательно понадобится проверить используемый порт определенного сервиса (или наоборот, найти сервисы, слушающие конкретный порт) — в Linux существует несколько утилит командной строки, которые могут с этим помочь. Давайте разберемся!
Первым делом на ум приходит утилита netstat , с помощью которой можно проверить сетевые соединения, статистику сетевых интерфейсов, таблицу маршрутизации и т. д.
Устанавливается данная утилита в разных дистрибутивах по-разному, например, для RedHat и CentOS:
Для вывода детальной информации о всех TCP и UDP ендпоинтах можно воспользоваться следующей командой:
Вывод будет примерно следующим:
- -p — вывод ID процесса и его имени;
- -n — вывод адресов;
- -l — вывод сокетов;
- -t — вывод TCP соединений;
- -u — вывод UDP соединений.
Найти сервис, запущенный на определенном порту можно так:
Аналогично можно найти на каком порту запущен определенный сервис:
Также для наших целей подойдет утилита командной строки fuser . По умолчанию она не установлена в большинстве операционных систем, чтобы установить ее в Centos/RedHat делаем так:
Например, чтобы найти идентификаторы процессов (PIDs), запущенных на 80-м порту, выполняем команду:
Результат выполнения будет примерно следующим:
Далее можем найти имя процесса по его идентификатору (PID):
Еще один способ — использование утилиты lsof . Установка ее в RedHat/CentOS выглядит так:
Вывод всех активных TCP и UPD соединений:
Результатом будет примерно следующее:
Проверить использование конкретного порта можно так:
Напоследок можно также воспользоваться утилитой whatportis . Ее установка в RedHat/Centos требует чуть больше действий:
В Debian/Ubuntu все гораздо проще:
В общем виде использование утилиты выглядит так:
Если вам неизвестно точное имя сервиса, можно воспользоваться опцией —like , например:
Также доступен вывод информации в json-формате:
Источник