Как проверить открытые порты в Linux (используемые порты)
How to Check for Listening Ports in Linux (Ports in use)
При устранении неполадок сетевого подключения или проблем, связанных с конкретным приложением, в первую очередь следует проверить, какие порты фактически используются в вашей системе, а какое приложение прослушивает определенный порт.
Что такое открытый порт (порт прослушивания)
Сетевой порт идентифицируется его номером, соответствующим IP-адресом и типом протокола связи, таким как TCP или UDP.
Вы не можете иметь две службы, прослушивающие один и тот же порт на одном и том же IP-адресе.
Например, если вы используете веб-сервер Apache, который прослушивает порты, 80 и 443 вы пытаетесь установить Nginx, позднее не удастся запустить, потому что порты HTTP и HTTPS уже используются.
Проверьте порты прослушивания с netstat
netstat это инструмент командной строки, который может предоставить информацию о сетевых подключениях
Чтобы получить список всех прослушиваемых портов TCP или UDP, включая службы, использующие порты и состояние сокета, используйте следующую команду:
Параметры, используемые в этой команде, имеют следующее значение:
Вывод будет выглядеть примерно так:
Важными столбцами в нашем случае являются:
Выходные данные показывают, что на этой машине порт 22 используется сервером SSH:
Если вывод пуст, это означает, что ничего не прослушивает порт.
Вы также можете отфильтровать список на основе критериев, например, PID, протокола, состояния и т. Д.
Проверьте порты прослушивания с ss
Вывод почти такой же, как тот, о котором сообщили netstat :
Проверьте порты прослушивания с lsof
lsof это мощная утилита командной строки, которая предоставляет информацию о файлах, открытых процессами.
В Linux все это файл. Вы можете думать о сокете как о файле, который пишет в сеть.
Чтобы получить список всех прослушивающих TCP-портов, lsof введите:
Используются следующие параметры:
Большинство имен выходных столбцов говорят сами за себя:
Чтобы узнать, какой процесс прослушивает определенный порт, например, порт, который 3306 вы используете:
Выходные данные показывают, что порт 3306 используется сервером MySQL:
Для получения дополнительной информации посетите страницу руководства lsof и прочитайте обо всех других мощных опциях этого инструмента.
Вывод
Мы показали вам несколько команд, которые вы можете использовать для проверки того, какие порты используются в вашей системе, и как найти процесс, который прослушивает определенный порт.
Как создать прослушиватель портов в Windows или Linux – удобный для тестирования подключения
Одной из сложных задач при работе в команде проекта является выполнение необходимого теста на связность, хотя службы не существуют.
Это часто приходится делать, когда вы работаете в среде DMZ для миграции или нового проекта.
Давайте рассмотрим пример в реальном времени – вы работаете над миграцией, и вам нужно обеспечить связь между приложениями «A» и «B» на определенном порту.
Что ж. Вы можете выполнить telnet, но как насчет того, когда «B» не работает? Здесь вам понадобится прослушиватель портов, чтобы помочь в этой ситуации.
Если у вас есть аналогичная ситуация или вы почувствуете, что это будет полезно для вас на работе, то здесь есть несколько способов добиться этого на платформе Windows или UNIX.
Создание почтового прослушивателя в ОС Windows
Чтобы иметь прослушиватель портов на определенном порту в Windows, вы можете использовать утилиту «Port Listener».
Эта утилита доступна бесплатно от Windows 95 до Windows 10.
Перейдите по пути, в котором вы извлекли файлы, в этом примере;
Введите номер порта, который вы хотите проверить, и нажмите кнопку start.
В приведенном выше примере я начал прослушивать порт на 5500, и пришло время проверить, работает ли он.
Откройте командную строку и запустите netstat, чтобы проверить, прослушивается ли порт 5500
Чтобы создать прослушиватель портов в ОС Linux
Процедура немного отличается в Linux; здесь мы будем использовать команду netcat (nc) для запуска слушателя.
Чтобы установить nc, вы можете использовать команду yum
После установки используйте следующую команду, чтобы запустить прослушиватель портов как 5500 в фоновом режиме.
Чтобы проверить, давайте использовать команду netstat
Так вот, у меня порт 5500 прослушивается успешно. Выполнение этого в Linux немного более удобно, не так ли?
Как создать прослушиватель портов с помощью Python
я нашел ниже код python, который работает на Windows и Linux. Создайте файл – допустим, portlistener.py с кодом ниже
Сохраните файл и запустите его с помощью команды python, как показано ниже.
Как посмотреть открытые порты в Linux
Если порт открыт это означает, что какая либо программа, обычно сервис, использует его для связи с другой программой через интернет или в локальной системе. Чтобы посмотреть какие порты открыты в вашей системе Linux можно использовать множество различных утилит. В этой статье мы рассмотрим самые популярные способы посмотреть открытые порты Linux.
Как посмотреть открытые порты linux
1. netstat
Утилита netstat позволяет увидеть открытые в системе порты, а также открытые на данный момент сетевые соединения. Для отображения максимально подробной информации надо использовать опции:
Открытые порты Linux, которые ожидают соединений имеют тип LISTEN, а перед портом отображается IP адрес на котором сервис ожидает подключений. Это может быть определенный IP адрес или */0.0.0.0 что означают любой доступный адрес:
Можно вывести только процессы, работающие на 80-том порту:
3. lsof
Ещё один пример, смотрим какие процессы работают с портом 80:
4. Nmap
sudo apt install nmap
Затем можно использовать:
Для простого сканирования можно запускать утилиту без опций. Детальнее о её опциях можно узнать в статье про сканирование сети в Nmap. Эта утилита ещё будет полезна если вы хотите посмотреть какие порты на компьютере доступны из интернета.
Дальше запускаем сканирование:
5. Zenmap
sudo apt install zenmap
Запустить программу можно из главного меню или командой:
Затем введите адрес localhost в поле Цель и нажмите кнопку Сканирование:
После завершения сканирования утилита вывела список открытых портов Linux.
Выводы
В этой статье мы рассмотрели инструменты, которые вы можете использовать для того чтобы узнать узнать открытые порты linux. Инструментов не так много как для просмотра информации об оперативной памяти или процессоре, но их вполне хватает. А какими программами пользуетесь вы? Напишите в комментариях!
Как слушать порт постоянно (bash+netcat+python)?
Доброго времени суток!
имеется bash скрипт
я хочу, слушать с этого порта даные и отправлять на питон. причем, слушать хочу постоянно, т.е если было одно соединение и оно порвалось. то сделав второе, все работает.
пробуем снова `nc localhost 30003` # not working
Т.е после того, как первый раз мы заскрыли соединение, перестает работать.
если не использовать канал | python3 script.py в bash скрипте, то все работает..
Как это можно починить?
Оценить 2 комментария
Настроить прослушивание порта средствами Python и не городить огород из утилит, баша и питона.
Вот пример простейшого TCP сервера, который удовлетворяет ваши запросы:
#—————————-
import socket
import threading
bind_ip = «0.0.0.0»
bind_port = 9999
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print «[*] Listening on %s:%d» % (bind_ip,bind_port)
# this is our client-handling thread
def handle_client(client_socket):
# print out what the client sends
request = client_socket.recv(1024)
print «[*] Received: %s» % request
# send back a packet
client_socket.send(«ACK!»)
client_socket.close()
while True:
client,addr = server.accept()
print «[*] Accepted connection from: %s:%d» % (addr[0],addr[1])
# spin up our client thread to handle incoming data
client_handler = threading.Thread(target=handle_client,args=(client,))
client_handler.start()
#——————————
Просто вместо ответа в виде ACK, перенаправте данные во второй скрипт.
З.Ы. к сожалению тут не публикует Tab’ы. Для корректной работы скрипта они должны быть у 16-21 и 24-28 строчек.
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.
Вы также можете использовать команду grep для определения, какое приложение прослушивает определённый порт, например:
Можно искать не по имени службы, а по номеру порта, с помощью этого можно определить, какая служба привязана к определённому порту:
2. Используя команду ss
ss — это другой полезный инструмент для отображения информации о сокетах. Её вывод выглядит похоже с тем, какую информацию даёт netstat. В документации netstat сказано, что она в основном устарела и её заменой является как раз ss.
Следующая команда покажет все прослушиваемые порты для TCP и 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».