В статье разбирается утилита netstat, которая предназначена для получения информации о сетевых подключениях к серверу или от него.
Оглавление скрыть
Об утилите
Эта утилита используется для вывода информации о сетевых подключениях. Также она может показать таблицы маршрутизации, статистику по интерфейсам и другое. Я использую эту утилиту только для вывода сетевых подключений.
Вообще эта утилита считается устаревшей и была заменена на утилиту ss, которую мы рассмотрим в следующей статье.
Получить справку об этой утилите можно здесь.
Установка netstat
Эта утилита входит в пакет net-tools, поэтому необходимо установить именно этот пакет, чтобы у вас в системе появилась утилита netstat. В пакет net-tools также включены следующие инструменты: arp, ifconfig, rarp, nameif и route. Все они считаются устаревшими, но иногда используются по привычке системного администратора.
И так, чтобы установить net-tools выполните:
$ sudo apt install net-tools
Работа утилиты
Если мы выполним netstat без дополнительных опций, то увидим активные сетевые соединения (Active Internet connections) и активные соединения с помощью сокетов (Active UNIX domain sockets).
How to Check Open Port of Linux
$ netstat Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 216 192.168.0.35:ssh pc-adm:64743 ESTABLISHED Active UNIX domain sockets (w/o servers) Proto RefCnt Flags Type State I-Node Path unix 2 [ ] DGRAM 799 /run/user/1000/systemd/notify unix 3 [ ] DGRAM 11402 /run/systemd/notify unix 2 [ ] DGRAM 11418 /run/systemd/journal/syslog unix 7 [ ] DGRAM 11424 /run/systemd/journal/dev-log unix 7 [ ] DGRAM 11426 /run/systemd/journal/socket unix 3 [ ] STREAM CONNECTED 12270 /run/systemd/journal/stdout ***
Выводимая информация для интернет соединений и соединений с помощью сокетов отличается.
Выводимые поля для интернет соединений:
- Proto — протокол (tcp, udp).
- Recv-Q — количество байтов, помещённых в буфер приёма TCP/IP, но не переданных приложению. Если это число высокое, то нужно проверить работоспособность приложения, которое работает с данным портом.
- Send-Q — количество байтов, помещённых в буфер отправки TCP/IP, но не отправленных, или отправленных, но не подтверждённых. Высокое значение может быть связано с перегрузкой сети сервера.
- Local Address — локальный адрес сервера. В обычных соединения, это адрес сервера на который пришло соединение. В прослушиваемых портах (LISTEN) — это диапазон адресов. Так 0.0.0.0:port — значит подключаться можно ко всем адресам сервера, а 192.168.0.35:port — значит подключаться можно только к этому адресу сервера.
- Foreign Address — адрес второй стороны. В обычных соединения, это адрес с которого пришло соединение. В прослушиваемых портах (LISTEN) — это диапазон адресов. Так 0.0.0.0:* — значит подключаться можно с любых адресов и с любых портов, а например 192.168.0.50:* — значит подключаться можно только с этого адреса и с любых портов.
- State — состояние подключения, или прослушивания.
Выводимые поля для соединений с помощью сокетов:
Как узнать какая программа использует какой TCP/UDP порт ПК
- Proto — протокол (unix);
- RefCnt — счётчик подключенных к этому сокету процессов;
- Flags — флаги, я их не буду рассматривать;
- Type — тип сокета
- DGRAM — работает без установки соединения;
- STREAM — с предварительной установкой соединения;
- LISTENING — сокет ожидает запроса на подключение;
- CONNECTED — сокет подключен;
- DISCONNECTING — сокет отключен;
- (пусто) — сокет не подключен к другому.
Примеры работы и дополнительные опции
Активные подключения и прослушиваемые порты
Если утилита netstat без опций выводила все активные подключения, то с опцией -a она дополнительно выведет все прослушиваемые порты.
Дополнительно можно отфильтровать информацию по типу протокола:
- -t — выводить только tcp;
- -u — выводить только udp;
- -x — выводить только сокеты.
Эти опции можно совмещать, например следующая команда покажет все активные подключения и прослушиваемые порты только для tcp и udp соединений:
$ netstat -atu Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN tcp 0 268 192.168.0.35:ssh pc-adm:64743 ESTABLISHED tcp6 0 0 [::]:http [::]:* LISTEN tcp6 0 0 [::]:ssh [::]:* LISTEN tcp6 0 0 [::]:https [::]:* LISTEN
Из вывода выше мы видим что у нас есть tcp соединения и нет udp. В tcp соединениях видно одно в состоянии ESTABLISHED, это я подключен к серверу по протоколу ssh. Остальные имеют состояние LISTEN — это прослушиваемые порты. Наш сервер слушает следующие порты: ssh (22 порт), https (443 порт), http (80 порт).
Только прослушиваемые порты или сокеты
Перечислить все прослушиваемые порты, в том числе и сокеты можно с помощью опции -l. Здесь вы также можете ограничить вывод tcp, udp или linux сокетами.
Например, следующая команда выведет все прослушиваемые порты и сокеты, так как я не ограничиваю вывод определённым протоколом:
$ netstat -l Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN tcp6 0 0 [::]:http [::]:* LISTEN tcp6 0 0 [::]:ssh [::]:* LISTEN tcp6 0 0 [::]:https [::]:* LISTEN Active UNIX domain sockets (only servers) Proto RefCnt Flags Type State I-Node Path unix 2 [ ACC ] STREAM LISTENING 211 /run/systemd/journal/io.systemd.journal unix 2 [ ACC ] STREAM LISTENING 802 /run/user/1000/systemd/private unix 2 [ ACC ] STREAM LISTENING 811 /run/user/1000/gnupg/S.dirmngr unix 2 [ ACC ] STREAM LISTENING 813 /run/user/1000/gnupg/S.gpg-agent.browser unix 2 [ ACC ] STREAM LISTENING 815 /run/user/1000/gnupg/S.gpg-agent.extra unix 2 [ ACC ] STREAM LISTENING 817 /run/user/1000/gnupg/S.gpg-agent.ssh unix 2 [ ACC ] STREAM LISTENING 819 /run/user/1000/gnupg/S.gpg-agent unix 2 [ ACC ] STREAM LISTENING 11882 /run/dbus/system_bus_socket unix 2 [ ACC ] STREAM LISTENING 11405 /run/systemd/private unix 2 [ ACC ] STREAM LISTENING 11407 /run/systemd/userdb/io.systemd.DynamicUser unix 2 [ ACC ] STREAM LISTENING 11408 /run/systemd/io.system.ManagedOOM unix 2 [ ACC ] STREAM LISTENING 11420 /run/systemd/fsck.progress unix 2 [ ACC ] STREAM LISTENING 11428 /run/systemd/journal/stdout unix 2 [ ACC ] SEQPACKET LISTENING 11430 /run/udev/control
Получение статистики
Для получения статистики по сетевым протоколам нужно использовать опцию -s. Здесь также можно ограничивать вывод по определённым протоколам, но нельзя использовать опцию -x.
Например следующая команда выведет статистику по протоколу udp:
$ netstat -su Udp: 314 packets received 0 packets to unknown port received 0 packet receive errors 317 packets sent 0 receive buffer errors 0 send buffer errors IgnoredMulti: 3856905 UdpLite: IpExt: InBcastPkts: 3856905 InOctets: 424191584 OutOctets: 6605615 InBcastOctets: 229159529 InNoECTPkts: 4157300 InECT0Pkts: 10507
Формат вывода
Утилита netstat, используя dns, пытается присвоить имена ip-адресам. Так, какой-нибудь, условный компьютер, с адресом 192.168.0.14 будет назван как pc-adm. Мы можем выключить такое именование хостов используя опцию -n.
А ещё утилита netstat именует стандартные порты в имена протоколов, например порт 22 будет назван ssh, 80 — http, 443 — https. Но мы можем выключить это поведение используя опцию -nn.
Также эта утилита умеет выводить имена процессов, которые обслуживают подключения, или слушают порты. Для этого нужно использовать опцию -p. Но чтобы мы увидели названия процессов, нужно запускать утилиту netstat используя sudo.
- netstat -ltnnp — вывести только прослушиваемые tcp порты. При этом не переводить ip адреса в имена хостов и не переводить номера портов в названия протоколов. Дополнительно вывести название процессов.
- netstat -atunnp — вывести все порты (прослушиваемые и активные). При этом выводить только сетевые порты (tcp и udp), а не сокеты. Не переводить ip адреса в имена хостов и не переводить номера портов в имена протоколов. А также вывести названия процессов участвующих в соединениях.
Пример последней команды показан здесь:
$ sudo netstat -atnnp Active Internet connections (servers and established) 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 402/sshd: /usr/sbin tcp 0 52 192.168.0.35:22 192.168.0.14:64743 ESTABLISHED 4121/sshd: alex [pr tcp6 0 0 . 80 . * LISTEN 403/apache2 tcp6 0 0 . 22 . * LISTEN 402/sshd: /usr/sbin tcp6 0 0 . 443 . * LISTEN 403/apache2
Итог
Linux узнать какая программа использует порт
4 способа узнать, какие порты прослушиваются в Linux
Порт может в одном из следующих состояний: открыт (open), фильтруется (filtered), закрыт (closed), без фильтрации (unfiltered). Порт называется открытым если какое-либо приложение, служба на целевой машине прослушивает (listening) его в ожидании соединений/пакетов. Также по отношению к службе часто употребляют термин «привязка» (bind), который означает, что служба назначена к определённому порту, то есть после её запуска она будет прослушивать его, чтобы ответить на входящие запросы.
Термин «привязка» используют по отношению к службам, которые прослушивают порт на постоянной основе и готовы принять входящие соединения. Примером таких служб являются SSH, MySQL, веб-сервер. Некоторые приложения (например, веб-браузер) делают исходящие соединения.
Для этих исходящих соединений обычно используется порт с номером в десятки тысяч, например, 37830 или 46392 или 54284 или что-то подобное. Но они используют порт на короткое время — только чтобы отправить запрос и получить ответ. Сразу после получения ответа программа освобождает порт.
Если ей понадобится вновь сделать запрос, то она может выбрать любой другой незанятый порт — необязательно тот же самый. Такие порты не являются прослушивающими, то есть они не принимают внешние запросы на инициализацию соединения. Это состояние сокета называется ESTABLISHED, его нужно отличать от прослушивания порта (LISTENING), то есть от открытых портов. В этой статье будут рассмотрены четыре способа проверить открытые порты, точнее говоря, какие порты прослушиваются в системе, а также показано вам как найти приложение (службу) прослушивающие определённый порт в Linux.
1. Используя команду netstat
Netstat — это широко применяемый инструмент для запроса информации о сетевой подсистеме Linux. Вы можете использовать её для показа всех открытых портов примерно так:
Флаг -l говорит netstat вывести все прослушивающие сокеты, -t означает показать все TCP соединения, -u для показа всех UDP соединений и -p включает показывать PID и имя программы/приложения, которое прослушивает порт. Обратите внимание, что вместо номеров портов программа выводит имена популярных служб. Если вы хотите, чтобы порты были показаны как числа, то добавьте флаг -n.


Если вам нужно чтобы данные постоянно обновлялись, то используйте ключ -c, тогда новые данные будут выводиться каждую секунду.
2. Используя команду ss
ss — это другой полезный инструмент для отображения информации о сокетах. Её вывод выглядит похоже с тем, какую информацию даёт netstat. В документации netstat сказано, что она в основном устарела и её заменой является как раз ss. Следующая команда покажет все прослушиваемые порты для TCP и UDP соединений в виде цифровых значений: Опции имеют такое же значение:
- -l означает показать только прослушивающие сокеты (по умолчанию они опускаются);
- -t означает показать TCP сокеты;
- -u означает показать UDP сокеты.
Если добавить ключ -p, то программа дополнительно покажет процессы, использующие сокет:
Программа очень детально показывает информацию по каждому процессу, в том числе выводит все подпроцессы, связанные с родительским. С одной стороны, это хорошо, так как информация исчерпывающая, но с другой, данных о процессах может быть слишком много и вывод становится трудно читаемым.
3. Используя программу Nmap
Nmap — это мощный и популярный инструмент исследования сети и сканер портов. Для установки nmap в вашу систему используйте стандартный менеджер пакетов как показано ниже.
На Debian/Ubuntu/Linux Mint:
На CentOS/RHEL:
На Fedora 22+:
На Arch Linux:
Для сканирования открытых/прослушиваемых портов на вашей системе Linux, запустите следующую команду (она может занять долгое время для завершения):
4. Используя команду lsof
Последний инструмент, который мы рассмотрим в этой статье, это команда lsof, которая используется для вывода списка открытых файлов в Linux. Поскольку в Unix/Linux всё является файлом, открытый файл может быть потоком или сетевым файлом.
Для вывода списка всех Интернет и сетевых файлов, используйте опцию -i. Помните, что эта команда показывает смесь имён служб и цифровых портов.
Чтобы найти, какое приложение прослушивает определённый порт, запустите lsof в следующей форме:
Вот и всё! В этой статье мы узнали четыре способа проверить открытые порты в Linux. Мы также показали, как проверить, какой процесс привязан к определённому порту.
О том, как правильно понимать вывод этих команд, смотрите статью «Что означают 0.0.0.0, :*, [::], 127.0.0.1. Как понять вывод NETSTAT».
3 способа узнать, какой процесс прослушивает определенный порт
Порт — логический объект, который представляет собой конечную точку связи и связан с данным процессом или службой в операционной системе. В предыдущих статьях мы объяснили, как узнать список всех открытых портов в Linux и как проверить доступность удаленных портов с помощью команды «nc».
В этой статье мы покажем три разных способа поиска процесса, прослушивающего конкретный порт в Linux.
1. Использование команды netstat
Команда netstat (network statistics) используется для отображения информации о сетевых подключениях, таблицах маршрутизации, статистике интерфейса и за ее пределами. Она доступна во всех Unix-подобных операционных системах, включая Linux, а также в ОС Windows.
Если netstat не установлен у вас по умолчанию, используйте следующую команду для его установки:
После установки вы можете использовать его с командой grep, чтобы найти процесс, прослушивающий конкретный порт в Linux, следующим образом:
В приведенной выше команде используются следующие опции:
- l — указывает netstat, — на то, что необходимо показывать только прослушивающие сокеты.
- t — указывает на отображение tcp-соединений.
- n — указывает на то, что необходимо показывать ip-адреса.
- p — позволяет показывать идентификатор процесса и имя процесса.
- grep -w — показывает соответствие точной строки (‘:80’).
2. Используя команду lsof
Команда lsof (LiSt Open Files) используется для отображения всех открытых файлов в системе Linux. Чтобы установить её в свою систему, введите команду, приведенную ниже.
Чтобы найти процесс, прослушивающий конкретный порт, введите:
3. Использование команды fuser
fuser показывает PID процессов с использованием указанных файлов или файловых систем в Linux.
Вы можете установить его следующим образом:
Вы можете найти процесс, прослушивающий конкретный порт, выполнив приведенную ниже команду:
Затем найдите имя процесса с использованием номера PID, с командой ps — таким образом:
Вопросы по статье задавайте в комментариях ниже.
Спасибо за уделенное время на прочтение статьи!
Если возникли вопросы, задавайте их в комментариях.
Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!
Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Cisco от Академии Cisco, курсы Linux от Linux Professional Institute на платформе SEDICOMM University.
Как посмотреть открытые порты в Linux
Сетевые порты — это механизм, с помощью которого операционная система определяет какой именно программе необходимо передать сетевой пакет. Здесь можно привести пример с домом. Например, почтальону необходимо доставить посылку. Он доставляет посылку к дому, это IP адрес компьютера. А дальше в самом доме уже должны разобраться в какую квартиру направить эту посылку.
Номер квартиры — это уже порт.
Если порт открыт это означает, что какая либо программа, обычно сервис, использует его для связи с другой программой через интернет или в локальной системе. Чтобы посмотреть какие порты открыты в вашей системе Linux можно использовать множество различных утилит. В этой статье мы рассмотрим самые популярные способы посмотреть открытые порты Linux.
Как посмотреть открытые порты linux
1. netstat
Утилита netstat позволяет увидеть открытые в системе порты, а также открытые на данный момент сетевые соединения. Для отображения максимально подробной информации надо использовать опции:
- -l или —listening — посмотреть только прослушиваемые порты;
- -p или —program — показать имя программы и ее PID;
- -t или —tcp — показать tcp порты;
- -u или —udp показать udp порты;
- -n или —numeric показывать ip адреса в числовом виде.
Открытые порты Linux, которые ожидают соединений имеют тип LISTEN, а перед портом отображается IP адрес на котором сервис ожидает подключений. Это может быть определенный IP адрес или */0.0.0.0 что означают любой доступный адрес:
sudo netstat -tulpn
Утилита ss — это современная альтернатива для команды netstat. В отличие от netstat, которая берет информацию из каталога /proc, утилита ss напрямую связывается со специальной подсистемой ядра Linux, поэтому работает быстрее и её данные более точные, если вы хотите выполнить просмотр открытых портов это не имеет большого значения. Опции у неё такие же:
Можно вывести только процессы, работающие на 80-том порту:
sudo ss -tulpn | grep :80
3. lsof
Утилита lsof позволяет посмотреть все открытые в системе соединения, в том числе и сетевые, для этого нужно использовать опцию -i, а чтобы отображались именно порты, а не названия сетевых служб следует использовать опцию -P:
Ещё один пример, смотрим какие процессы работают с портом 80:
sudo lsof -i -P | grep :80
4. Nmap
Программа Nmap — мощный сетевой сканер, разработанный для сканирования и тестирования на проникновение удаленных узлов, но ничего не мешает направить его на локальный компьютер. Утилита позволяет не только посмотреть открытые порты, но и примерно определить какие сервисы их слушают и какие уязвимости у них есть. Программу надо установить:
sudo apt install nmap
Затем можно использовать:
Для простого сканирования можно запускать утилиту без опций. Детальнее о её опциях можно узнать в статье про сканирование сети в Nmap. Эта утилита ещё будет полезна если вы хотите посмотреть какие порты на компьютере доступны из интернета.
Если это публичный сервер, то результат скорее всего не будет отличатся от локального сканирования, но на домашнем компьютере все немного по другому. Первый вариант — используется роутер и в сеть будут видны только порты роутера, еще одним порогом защиты может стать NAT-сервер провайдера. Технология NAT позволяет нескольким пользователям использовать один внешний IP адрес. И так для просмотра открытых внешних портов сначала узнаем внешний ip адрес, для надежности воспользуемся онлайн сервисом:
Дальше запускаем сканирование:
В результате мы видим, что открыт порт 80 веб-сервера и 22 — порт службы ssh, я их не открывал, эти порты открыты роутером, 80 — для веб-интерфейса, а 22 для может использоваться для обновления прошивки. А еще можно вообще не получить результатов, это будет означать что все порты закрыты, или на сервере установлена система защиты от вторжений IDS. Такая проверка портов может оказаться полезной для того, чтобы понять находится ли ваш компьютер в безопасности и нет ли там лишних открытых портов, доступных всем.
5. Zenmap
Программа Zenmap — это графический интерфейс для nmap. Она не делает ничего нового кроме того, что может делать nmap, просто предоставляет ко всему этому удобный интерфейс. Для её установки выполните:
sudo apt install zenmap
Запустить программу можно из главного меню или командой:
Затем введите адрес localhost в поле Цель и нажмите кнопку Сканирование:
После завершения сканирования утилита вывела список открытых портов Linux.
Выводы
В этой статье мы рассмотрели инструменты, которые вы можете использовать для того чтобы узнать узнать открытые порты linux. Инструментов не так много как для просмотра информации об оперативной памяти или процессоре, но их вполне хватает. А какими программами пользуетесь вы? Напишите в комментариях!
Источник: onecomp.ru
Как определить, какая служба прослушивает конкретный порт
Мануал
Автор cryptoparty На чтение 6 мин Опубликовано 30.09.2019
В этом руководстве объясняется несколько разных способов узнать, какая служба прослушивает определенный порт в Linux.
Большинство из вас знает порт по умолчанию для популярных служб или процессов
Например, порт Apache по умолчанию – 80, порт FTP по умолчанию – 21, а порт SSH по умолчанию – 22.
Вы можете найти имена и номера портов в Linux, как описано в этом руководстве.
Номера портов по умолчанию также можно изменить на любые пользовательские порты для защиты сервера Linux.
Если изменить номер порта по умолчанию, как вы узнаете, какая служба прослушивает какой порт?
Вот что мы собираемся выяснить сейчас!
Найдите, какая служба прослушивает определенный порт в Linux
Я перечислил четыре метода, которые помогают проверить, какая служба работает с определенным номером порта.
Я буду продолжать обновлять этот список, если буду сталкиваться с любыми новыми методами в будущем.
Так что, добавьте в закладки и проверяйте эту статью время от времени.
Метод 1 – Использование netstat
Это наиболее часто используемый способ узнать, какая служба прослушивает какой порт.
Netstat – это утилита командной строки, используемая для печати сетевых подключений, таблиц маршрутизации, статистики интерфейса, маскарадных подключений и многоадресного членства.
Netstat доступен в репозиториях по умолчанию большинства дистрибутивов Linux.
Чтобы установить его на Arch Linux и его вариантах, выполните:
$ sudo pacman -S net-tools
$ sudo yum install net-tools
$ sudo dnf install net-tools
На Debian, Ubuntu:
$ sudo apt install net-tools
После установки выполните следующую команду, чтобы узнать, какие службы прослушивают какие порты:
$ sudo netstat -tulpn
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 665/systemd-resolve tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1026/sshd tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 2068/python3 tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1072/mysqld tcp6 0 0 . 22 . * LISTEN 1026/sshd tcp6 0 0 . 80 . * LISTEN 1062/apache2 udp 0 0 127.0.0.53:53 0.0.0.0:* 665/systemd-resolve udp 0 0 192.168.225.22:68 0.0.0.0:* 647/systemd-network udp 0 0 192.168.225.53:68 0.0.0.0:* 647/systemd-network udp6 0 0 fe80::a00:27ff:feff:546 . * 647/systemd-network udp6 0 0 fe80::a00:27ff:fe7e:546 . *
Приведенная выше команда перечисляет все службы и номера портов, которые они прослушивают.
Что если вы хотите узнать, какая служба прослушивает определенный порт?
Здесь пригодится команда grep!