Синтаксис Nmap
Команда запуска Nmap очень проста для этого достаточно передать ей в параметрах целевой IP адрес или сеть, а также указать опции при необходимости:
$ nmap опции адрес
Теперь давайте рассмотрим основные опции, которые понадобятся нам в этой статье.
- -sL — просто создать список работающих хостов, но не сканировать порты nmap;
- -sP — только проверять доступен ли хост с помощью ping;
- -PN — считать все хосты доступными, даже если они не отвечают на ping;
- -sS/sT/sA/sW/sM — TCP сканирование;
- -sU — UDP сканирование nmap;
- -sN/sF/sX — TCP NULL и FIN сканирование;
- -sC — запускать скрипт по умолчанию;
- -sI — ленивое Indle сканирование;
- -p — указать диапазон портов для проверки;
- -sV — детальное исследование портов для определения версий служб;
- -O — определять операционную систему;
- -T — скорость сканирования, чем больше, тем быстрее;
- -D — маскировать сканирование с помощью фиктивных IP;
- -S — изменить свой IP адрес на указанный;
- -e — использовать определенный интерфейс;
- —spoof-mac — установить свой MAC адрес;
- -A — определение операционной системы с помощью скриптов.
Теперь, когда мы рассмотрели все основные опции, давайте поговорим о том, как выполняется сканирование портов nmap.
Что такое сканер портов?
Сканер портов относится к программному приложению, которое сканирует сервер на наличие открытых портов. Он позволяет аудиторам и сетевым администраторам проверять сетевую безопасность, в то время как злоумышленники и хакеры используют ее для определения открытых портов для использования или запуска вредоносных служб на компьютере или сервере.
Сканирование портов представляет собой способ определения, какие порты в сети открыты. Поскольку порты на компьютере — это место, где информация отправляется и принимается, сканирование портов аналогично стуку в дверь, чтобы увидеть, находится ли кто-то дома. Выполнение сканирования портов в локальной сети или на сервере позволяет определить, какие порты открыты и находятся в режиме прослушивания (listening) (получения информации), а также выявить наличие таких устройств безопасности, как межсетевые экраны, которые находятся между отправителем и целью. Этот метод известен как дактилоскопия (fingerprinting). Это также полезно для тестирования сетевой безопасности и надежности брандмауэра системы. Благодаря этой функциональности, это также популярный инструмент разведки для злоумышленников, ищущих слабую точку доступа для проникновения в компьютер или сервер.
Порты различаются по своим назначениям. Они пронумерованы от 0 до 65535, но определенные диапазоны используются чаще. Порты с 0 по 1023 идентифицируются (https://ru.wikipedia.org/wiki/Список_портов_TCP_и_UDP), как «общеизвестные порты» или стандартные порты и были назначены для определенных служб, агентством по присвоению номеров в Интернете (IANA). Некоторые из наиболее известных портов и назначенных им служб включают в себя:
- Порт 20 (UDP) — протокол передачи файлов (FTP) для передачи данных
- Порт 22 (tcp) — протокол Secure Shell (SSH) для безопасного входа, FTP и переадресации портов
- Порт 23 (tcp) — протокол Telnet для не зашифрованных текстовых коммутаций
- Порт 53 (UDP) — Система доменных имен (DNS) переводит имена всех компьютеров в Интернете в IP-адреса
- Порт 80 (tcp) — Всемирная паутина HTTP
Зачем нужна команда nmap?
Основная задача команды nmap – сканирование сетевых портов указанных компьютеров для определения, какие из них используются (прослушиваются) программами-серверами. Для подавляющего числа сетевых демонов (служб) определены их стандартные порты по-умолчаню, которые они используют для своей работы. По этому признаку можно делать выводы, о том какие серверные программы запущены на том или ином компьютере в сети.
Также команда nmap – это самый доступный инструмент в руках злоумышленников для организации подготовки хакерской атаки на сеть. Ведь с помощью этой команды очень легко получить информацию, на основе которой можно судить о слабых и уязвимых местах в атакуемой системе.
Scanning Open UDP/TCP Ports with PortQry
The first version of PortQry for Windows Server 2003 doesn’t work correctly in newer OS versions (Windows Server 2008 and newer), so the second version of the utility, PortQryV2, has been released. It is the version that you should use today (you can download PortQryV2 here).
On Windows 10, you can install PortQry using the Chocolatey package manager with the command:
Download and extract the PortQryV2.exe archive. Run the command prompt and go to the directory with the utility, for example:
For example, to check the availability of a DNS server from a client, you need to check if 53 TCP and UDP ports are open on it. The syntax of the port check command is as follows:
- -n is the name or IP address of the server, which availability you are checking;
- -e is the port number to be checked (from 1 to 65535);
- -r is the range of ports to be checked (for example, 1:80);
- -p is the protocol used for checking. It may be TCP, UDP, or BOTH (TCP is used by default).
Note. Unlike the Test-NetConnection PowerShell cmdlet that can be used to check the availability only of TCP ports, the PortQry utility supports both TCP and UDP protocols.
In our example, the command looks like this:
Portqry will return one of three available port states:
- Listening – means that the port is opened (accepts connections), a response has been received from it;
- Not Listening – shows there isn’t any process (service) on the target system that accepts connections on the specified port. The PortQry received an ICMP response “Destination Unreachable – Port Unreachable” when checking the UDP port, or TCP packet with the Reset flag;
- Filtered – means that PortQry hasn’t received any response from the specified port or the response has been filtered. I. e., this port is not listening on the target system, or the access to it is restricted by a firewall or some system settings. By default, TCP ports are polled 3 times, and UDP is one.
In our example, the DNS server is available from the client both over TCP and UDP ports.
TCP port 53 (domain service): LISTENING UDP port 53 (domain service): LISTENING
Using -o attribute, you can specify the sequence of ports to check their availability:
The next command scans the ranges of the well-known TCP/IP port numbers and returns the list of ports that accept the connections (works as TCP Port Scanner):
You can save the open ports scan result to a text file:
The portqry utility has an interactive mode:
Now, at the PortQry Interactive Mode prompt, you can specify the name of the remote computer and port number:
To check the port on the specified server, press q and Enter.
Using the -wport and -wpid arguments, you can monitor the status of the specified port (wport), or all ports associated with the specified process (wpid) on the local host.
For example, the following command will monitor the response of the specified local port within 10 minutes (for example, RDP port 3389), and if its status changes, it will notify the administrator about this (a detailed log will be available in the LogFile.txt). To stop port monitoring, press Ctrl-C:
You can get information about opened ports and active TCP/UDP connections on the local computer:
Почему важно знать, какие порты открыты на компьютере?
Открытый порт на вашем компьютере (если не настроен файервол для запрета входящих соединений) означает, что к вашему компьютеру можно подключиться из вне.
Если ваш компьютер заражён вредоносным программным обеспечением, таким как троян, бэкдор (вирусы, которые позволяют злоумышленнику удалённо подключаться к вашему компьютеру и управлять им), то обычно такой бэкдор открывает порт и прослушивает сеть, в ожидании входящего соединения. Хотя могут быть варианты, например, многие бэкдоры подключаются к компьютеру злоумышленника и ожидают команд — в этом случае правильнее говорить не об открытом порте, а об установленном соединении
Это распространённый способ поведения вредоносного ПО, поскольку в данном случае не требуется, чтобы у жертвы был белый IP (что для домашних компьютеров является редкостью). Поэтому важно проверять открытые порты и установленные сетевые соединения. Конечно, установленное соединение означает наличие открытого порта, но с технической точки зрения это всё-таки разные вещи.
Ещё один пример, когда нужно определить, какая именно служба прослушивает порт: вы пытаетесь установить сетевую службу (веб-сервер Apache или СУБД MySQL), а они не запускаются, так как какая-то другая служба уже заняла их порт, который они используют по умолчанию. В этом случае нужно найти эту службу и отключить её или настроить на работу с другим портом.
Но, как и во многих IT задачах (да и вообще во многих профессиональных сферах), получить данные это только самое начало. Главное — это правильно их истолковать и понять.
Поэтому в этой статье мы рассмотрим, как узнать, какие порты открыты, как проверить, какая служба прослушивает определённый порт, а также научимся правильно понимать вывод команды NETSTAT и аналогичных.
lsof
Утилита lsof позволяет посмотреть все открытые в системе соединения, в том числе и сетевые, для этого нужно использовать опцию -i, а чтобы отображались именно порты, а не названия сетевых служб следует использовать опцию -P:
Ещё один пример, смотрим какие процессы работают с портом 80:
4. Nmap
Программа Nmap — мощный сетевой сканер, разработанный для сканирования и тестирования на проникновение удаленных узлов, но ничего не мешает направить его на локальный компьютер. Утилита позволяет не только посмотреть открытые порты, но и примерно определить какие сервисы их слушают и какие уязвимости у них есть. Программу надо установить:
Затем можно использовать:
Для простого сканирования можно запускать утилиту без опций. Детальнее о её опциях можно узнать в статье про сканирование сети в Nmap. Эта утилита ещё будет полезна если вы хотите посмотреть какие порты на компьютере доступны из интернета.
Если это публичный сервер, то результат скорее всего не будет отличатся от локального сканирования, но на домашнем компьютере все немного по другому. Первый вариант — используется роутер и в сеть будут видны только порты роутера, еще одним порогом защиты может стать NAT-сервер провайдера. Технология NAT позволяет нескольким пользователям использовать один внешний IP адрес. И так для просмотра открытых внешних портов сначала узнаем внешний ip адрес, для надежности воспользуемся онлайн сервисом:
Дальше запускаем сканирование:
В результате мы видим, что открыт порт 80 веб-сервера и 22 — порт службы ssh, я их не открывал, эти порты открыты роутером, 80 — для веб-интерфейса, а 22 для может использоваться для обновления прошивки. А еще можно вообще не получить результатов, это будет означать что все порты закрыты, или на сервере установлена система защиты от вторжений IDS. Такая проверка портов может оказаться полезной для того, чтобы понять находится ли ваш компьютер в безопасности и нет ли там лишних открытых портов, доступных всем.
5. Zenmap
Программа Zenmap — это графический интерфейс для nmap. Она не делает ничего нового кроме того, что может делать nmap, просто предоставляет ко всему этому удобный интерфейс. Для её установки выполните:
Запустить программу можно из главного меню или командой:
Затем введите адрес localhost в поле Цель и нажмите кнопку Сканирование:
После завершения сканирования утилита вывела список открытых портов Linux.
Расширенный статус сетевых служб в PortQry
В утилите PortQry имеется встроенная поддержка некоторых сетевых служб. Это LDAP, Remote Procedure Calls (RPC), почтовые протоколы (SMTP, POP3 и IMAP4), SNMP, FTP/ TFTP, NetBIOS Name Service, L2TP и другие. Кроме проверки доступности этих стандартных портов этих служб, утилита выполняет специфические для конкретного протокола запросы для получения статуса сервиса.
Например, с помощью следующего запроса мы не только проверим доступность службы RPC endpoint mapper (TCP/135), но и получим список имен зарегистрированных в системе конечных точек RPC (в том числе их имя, UUID, адрес к которому они привязаны и приложение, с которым они связаны).
TCP port 135 (epmap service): LISTENING Using ephemeral source port Querying Endpoint Mapper Database... Server's response: UUID: d95afe72-a6d5-4259-822e-2c84da1ddb0d ncacn_ip_tcp:10.1.10.6 UUID: 897e215f-93f3-4376-9c9c-fd2277495c27 Frs2 Service ncacn_ip_tcp:10.1.10.6 UUID: 6b5bd21e-528c-422c-af8c-a4079be4fe48 Remote Fw APIs ncacn_ip_tcp:10.1.10.6 UUID: 12345678-1234-abcd-ef22-0123456789ab IPSec Policy agent endpoint ncacn_ip_tcp:10.1.10.6 UUID: 367abb81-9844-35f1-ad32-91f038001003 ncacn_ip_tcp:10.1.10.6 UUID: 50abc2a3-574d-40b3-1d66-ee4fd5fba076 ncacn_ip_tcp:10.1.10.6 …….. UUID: 3c4428c5-f0ab-448b-bda1-6ce01eb0a6d5 DHCP Client LRPC Endpoint ncacn_ip_tcp:10.1.10.6 Total endpoints found: 61 ==== End of RPC Endpoint Mapper query response ==== portqry.exe -n 10.1.10.6 -e 135 -p TCP exits with return code 0x00000000.
Или вы можете проверить доступность и ответ от службы SQL Server Browser на сервере Microsoft SQL Server:
UDP port 1434 (ms-sql-m service): LISTENING or FILTERED Sending SQL Server query to UDP port 1434... Server's response: ServerName MSK-SQL01 InstanceName MSSQLSERVER IsClustered No Version 15.0.2000.5 tcp 53200 ServerName MSK-SQL01 InstanceName BANKDB IsClustered No Version 15.0.2000.5 tcp 1433 ==== End of SQL Server query response ==== UDP port 1434 is LISTENING
Как вы видите, утилита portqry показала не только доступность UDP порта, но и версию SQL сервера и имена запущенных на сервере SQL экземпляров и их TCP порты (один инстанс BANKDB живет на порту по умолчанию tcp 1433, второй MSSQLSERVER использует фиксированный порт из RPC диапазона 53200 — см. статью о настройке портов в SQL Server).
Можно опросить SNMP порт на устройстве, указав название community:
При проверке 25 порта на SMTP сервере можно получить баннер приветствия сервера:
Пишем сканер на сокетах
Этот сканер — самый простой и очевидный. Чтобы узнать, какие порты открыты, можно просто попробовать подключиться к ним поочередно и посмотреть, что будет.
Все примеры кода привожу на Python 3.10, а работать я предпочитаю в PyCharm, хотя и не навязываю тебе свой выбор.
Создаем программу и импортируем основные модули:
www
Подробнее узнать о работе с модулем socket можно в официальной документации.
Запомним время запуска программы — в дальнейшем это пригодится, чтобы узнать время сканирования.
Хранить пары из портов и названий сервисов будем прямо в коде. При желании можешь проапгрейдить этот метод, например до файлов JSON.
Преобразуем переданный аргумент в IP-адрес. Для этого скормим первый аргумент командной строки нашего сканера функции — бонусом получим разрешение DNS, если передано доменное имя, а не IP-адрес.
Теперь в цикле обойдем все порты из списка и проверим возможность подключения к ним. Если порт закрыт, будет вызываться исключение, которое мы перехватим, и программа не вылетит.
В конце работы сохраняем время окончания и выводим на экран длительность сканирования.
Теперь, чтобы протестировать работу нашего сканера, откроем терминал, перейдем в папку со сканером и выполним команду
info
Если ты работаешь на Linux, используй команду , чтобы случайно не нарваться на устаревший Python.
Само собой, вместо IP в примере можно указать любой хост.
Давай посмотрим, как это выглядит со стороны сервера. Для этого воспользуемся старичком Netcat. Скачай его и запусти следующим образом:
warning
Netcat может понадобиться внести в белый список антивируса или согласовать установку с корпоративной службой безопасности. Netcat часто используют хакеры, чтобы поднять шеллы в скомпрометированных системах, так что ругань антивируса вполне оправданна.
В соседнем терминале запускаем наш сканер изучать наш собственный IP-адрес. Посмотреть его можно в выводе команды . В результате в окне с Netcat произойдет следующее.
Реакция Netcat на сканирование
На скриншоте видно, что было установлено полноценное соединение, и, конечно, в реальности любая программа тоже это увидит, то есть незаметно просканировать кого‑то таким образом не получится.
Также давай теперь просканируем сервер (именно его IP был в первом примере). Результаты будут выглядеть примерно так:
Сканер нашел два открытых порта — 22 и 80. Но если просканировать этот же хост при помощи Nmap, увидим, что открытых портов намного больше.
Почему так? Nmap проходит по значительно большему списку портов, чем наш сканер, и, соответственно, видит больше. Если мы добавим эти порты в наш сканер, он тоже их найдет.
Понятно, что такой сканер вряд ли применим в реальных условиях, кроме совсем уж экзотических: например, когда сканировать надо с машины, на которую невозможно доставить полноценный сканер, но на которой уже есть Python.
Давай лучше попробуем сделать сканер, который не станет так палиться и работать будет куда быстрее.
About the Nmap Port Scanner Software
Nmap is a network port scanner that tests network connectivity between different hosts and services. Firewalls, Router ACL’s and other factors can impact a network based connection.
Initially Nmap was a simple but powerful tool that enabled the scanning of networks or individual hosts to determine if there were services running and if a firewall was present. Modern versions of Nmap have extended capability to include a built in scripting language (NSE) that can perform a multitude of additional checks against any services found to be open. This ever growing list of scripts has pushed Nmap into the realms of a fast light weight vulnerability scanner.
Download Nmap today from insecure.org, it is available in versions for Windows (XP, 2003, 2008) and Linux / FreeBSD. Zenmap is a graphical front end for those not comfortable on the command line. When installing Nmap I encourage you to download from the source as it is constantly being improved and built upon. Linux distributions will not always have the latest version in the package repository.
Синтаксис команды nmap и особенности её работы
Команда nmap довольно проста в использовании и каким-то сложным синтаксисом не отличается:
nmap {цель сканирования}
Чего нельзя сказать о количестве, функциональности её ключей и неисчерпаемых возможностях их применения. Официальная документация, доступная на страницах man-руководства (команда man nmap), кроме того, что очень подробная (трудно встретить ещё подробнее), так ещё и имеет качественный перевод (локализации, в том числе и на русском языке) в большинстве Linux-дистрибутивов.
Не всегда утилита nmap предустановлена в системе, поэтому для её использования требуется установка соответствующего пакета, который обычно имеет имя nmap:
$ sudo apt-get install nmap
Или в Centos/Redhat
$ yum install nmap -y
Пример:
$ nmap -sT localhost
Столбец STATE показывает состояние порта: он может быть открыт (open), когда связан с использующими его службами (соединениями), закрыт (closed), когда порт не используется ни одним сервером. Также доступны состояния: unfiltered, когда nmap не смогла определить состояние порта. А также filtered – когда порт защищён (или заблокирован) брандмауэром.
Для задания хоста можно также использовать цифровую запись в виде IP-адреса. Отчёт из данного примера сформирован для самого обычного компьютера, для которого не была сконфигурирована какая-то защита. Как можно видеть, для прослушивания 80 и 443 портов для работы протоколов HTTP и HTTPS соответственно, запущен веб-сервер. Сервер баз данных (БД) MySQL также работает по стандартному порту.
Что такое порт компьютера
Порты, доступность которых определяет сканер, открываются по запросу, когда определенная программа собирается взаимодействовать с удаленными серверами. В результате подключение к нему становится возможным. Каждый порт имеет собственный зарезервированный номер – проверить можно только его. Это предусмотрено TCP или айпи протоколом. Так, если обозреватель подключается к порту, номер которого совпадает с нужным сайтом, в ответ браузер принимает зашифрованные данные – этот код отображается в виде веб-ресурса.
Проверка портов по IP на доступность допускается в случае, если компьютеру или мобильному устройству присвоен индивидуальный адрес. Уточнить эту информацию можно у своего провайдера.
Yougetsignal
Yougetsignal – это инструмент проверки открытых портов, который позволяет вам проверять любой внешний IP-адрес на наличие открытых портов.
Это полезный инструмент для проверки ограничений, установленных в брандмауэре.
С помощью этого инструмента вы можете проверить все порты TCP и UDP.
Заключение
Ниже перечислены некоторые бесплатные инструменты, доступные в Интернете для проверки открытых портов на сервере и других DNS-запросов.
Мы классифицировали некоторые из лучших сканеров портов и инструментов проверки портов, чтобы помочь найти открытые порты и другие связанные с портами операции при выполнении теста на проникновение в сеть.
- 8 лучших инструментов сканеров IP для управления сетью
- ? GoScan: интерактивный сетевой сканер
Немного о сетевых портах
Они представляют собой числовые комбинации, отображающиеся в виде 16 битного значения в диапазоне 1-65535. Записываются показатели в заголовках протоколов (пакетов в совокупности с IP) транспортного уровня, согласно принципам построения сетевой модели OSI. Посредством открытых портов (виртуальных путей) устанавливается связь хостов и устройств (приложений). Они выделяются системой и служат промежуточным звеном между ПО или сервисами с внутренними или внешними программами/host.
Классификация и особенности типов портов
Виды port определяются числовыми диапазонами, выделенными под них. Идентифицируемые номера системные ресурсы бывают трех типов:
- Наиболее распространенными считаются от 1 до 1023. Этими комбинациями активно пользуются почтовые ресурсы (POP версии 3), IMAP, веб-сервисы HTML и другие.
- Port от 1024 до 49151 относятся к категории зарезервированных. Они забронированы конкретными протоколами ПО.
- Port от 49152 до 65536 называют частными или динамическими. Т.е. они открытые для использования кем угодно.
Используя сканер онлайн можно, в том числе, проверить порт на принадлежность к определенному типу. В выгрузке результатов указываются открытые port и отображаются их номера.
Полезная информация
Не стоит путать порты с разъемами устройств. Формально, это понятия синонимы. Однако в первом случае, устанавливается виртуальная связь, а во втором, — физическая.
Интересный факт! По умолчанию порты с 20 по 21 — это соединение FTP. 110-ый выделен для почтовых протоколов POP3.
Сокетом (файловым дескриптором) называют сочетание IP и порта. С помощью этой связки ПО осуществляет передачу данных.
Технология Port Forwarding
Проброс портов (в дословном переводе переадресация или отображение) предназначен для обращения к ПК во внутренней локальной сети из Интернета посредством маршрутизатора по механизму NAT/ NAPT (в TCP/IP, преобразовывая IP транзитных пакетов). С помощью перенаправления трафика, технология открывает доступ с внешнего адреса к «целевому» устройству.
Обратите внимание! По умолчанию порты router закрыты в целях защиты от сетевых атак. При необходимости подключения определенных служб (в том числе многопользовательских игр) их открывают вручную
Как работает Nmap?
В компьютерных сетях все подключенные устройства имеют свой ip адрес. Каждый компьютер поддерживает протокол ping, с помощью которого можно определить подключен ли он к сети. Мы просто отправляем ping запрос компьютеру, и если он отзывается, то считаем, что он подключен. Nmap использует немного иной подход. Компьютеры также определенным образом реагируют на те или иные сетевые пакеты, утилита просто отправляет нужные пакеты и смотрит какие хосты прислали ответ.
Но об этом вы, наверное, уже знаете. Более интересно то как Nmap узнает какие сервисы запущены на машине. Суть работы всех сетевых программ основана на портах. Чтобы получить сообщение из сети, программа должна открыть порт на вашем компьютере и ждать входящих соединений. А для отправки сообщения по сети нужно подключиться к уже другой программой (адресатом) порту. Затем программе необходимо будет открыть порт, на котором она будет ждать ответа.
Утилита nmap в процессе сканирования сети перебирает доступный диапазон портов и пытается подключиться к каждому из них. Если подключение удалось, в большинстве случаев, передав несколько пакетов программа может даже узнать версию программного обеспечения, которые ожидает подключений к этому порту. Теперь, после того, как мы рассмотрели основы, рассмотрим как пользоваться nmap для сканирования портов и сети.
Как проверить открытые порты в Linux с соответствующим сервисом-процессом?
Существуют различные способы, с помощью которых можно определить открытые порты прослушивания на Linux.
1. Проверка открытых портов в Linux с помощью команды NETSTAT
В основной форме команда NetStat выводит на экран или печатает информацию о сетевых подключениях и таблицу маршрутизации и т.д. Однако та же команда вместе с параметром ниже может быть использована для проверки открытых портов в Linux.
Команда:
netstat -tulpn | grep LISTEN
Вывод:
# netstat -tulpn | grep LISTEN tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 904/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 866/master tcp6 0 0 :::80 :::* LISTEN 1086/httpd tcp6 0 0 :::22 :::* LISTEN 904/sshd tcp6 0 0 ::1:25 :::* LISTEN 866/master #
Вот команда выше отображает все выходные TCP, а также порты UDP. В случае, если вы хотите отфильтровать его дальше, допустим, вы хотите узнать, процесс или услугу, используемую по порту 80, следуют использовать команду ниже.
# netstat -tulpn | grep LISTEN|grep 80 tcp6 0 0 :::80 :::* LISTEN 1086/httpd #
В приведенной выше командной порт используется HTTPd службы с PID 1086.
2. Проверка открытых портов в Linux с помощью утилиты lsof
Утилита lsof в основном отображает список открытых файлов. Однако с некоторыми настройками параметров мы можем в состоянии также проверить открытые порты в Linux. По умолчанию она не установлена в системе, пожалуйста, следуйте ниже набором команд для установки в соответствии с дистрибутивом Linux.
Для RHEL и CentOS OS #yum install lsof Для Debian и Ubuntu OS #apt install lsof
Команда:
#lsof -i -P -n
Вывод:
# lsof -i -P -n COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME chronyd 513 chrony 1u IPv4 14330 0t0 UDP 127.0.0.1:323 chronyd 513 chrony 2u IPv6 14331 0t0 UDP :323 dhclient 548 root 6u IPv4 15326 0t0 UDP *:68 dhclient 548 root 20u IPv4 15315 0t0 UDP *:41668 dhclient 548 root 21u IPv6 15316 0t0 UDP *:23435 master 866 root 13u IPv4 16678 0t0 TCP 127.0.0.1:25 (LISTEN) master 866 root 14u IPv6 16679 0t0 TCP :25 (LISTEN) sshd 904 root 3u IPv4 17424 0t0 TCP *:22 (LISTEN) sshd 904 root 4u IPv6 17426 0t0 TCP *:22 (LISTEN) sshd 951 root 3u IPv4 17884 0t0 TCP 172.31.22.4:22->103.211.42.2:59572 (ESTABLISHED) sshd 954 ec2-user 3u IPv4 17884 0t0 TCP 172.31.22.4:22->103.211.42.2:59572 (ESTABLISHED) httpd 1086 root 4u IPv6 19036 0t0 TCP *:80 (LISTEN) httpd 1088 apache 4u IPv6 19036 0t0 TCP *:80 (LISTEN) httpd 1089 apache 4u IPv6 19036 0t0 TCP *:80 (LISTEN) httpd 1090 apache 4u IPv6 19036 0t0 TCP *:80 (LISTEN) httpd 1091 apache 4u IPv6 19036 0t0 TCP *:80 (LISTEN) httpd 1092 apache 4u IPv6 19036 0t0 TCP *:80 (LISTEN)
В случае, если вы хотите получить более подробную информацию о порте 80 можно использовать следующую команду:
# lsof -i :80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME httpd 1056 root 4u IPv6 19036 0t0 TCP *:http (LISTEN) httpd 1057 apache 4u IPv6 19036 0t0 TCP *:http (LISTEN) httpd 1058 apache 4u IPv6 19036 0t0 TCP *:http (LISTEN) httpd 1059 apache 4u IPv6 19036 0t0 TCP *:http (LISTEN) httpd 1060 apache 4u IPv6 19036 0t0 TCP *:http (LISTEN) httpd 1061 apache 4u IPv6 19036 0t0 TCP *:http (LISTEN)
Здесь, в этом выводе вы можете четко отметить, что порт 80 используется службой HTTP, имеющей PID 1056.
3. Проверка открытых портов в Linux с помощью nmap
Nmap является инструментом сканирования порта, используемый в Linux. Он не установлен на системах Linux по умолчанию. Вам необходимо установить его с помощью следующей команды.
yum install nmap
После того, как он установиться, используется команда для проверки открытых портов в Linux.
Команда:
# nmap -sT -O localhost
Вывод:
# nmap -sT -O localhost Starting Nmap 6.40 ( http://nmap.org ) at 2017-09-15 13:59 UTC RTTVAR has grown to over 2.3 seconds, decreasing to 2.0 RTTVAR has grown to over 2.3 seconds, decreasing to 2.0 RTTVAR has grown to over 2.3 seconds, decreasing to 2.0 RTTVAR has grown to over 2.3 seconds, decreasing to 2.0 RTTVAR has grown to over 2.3 seconds, decreasing to 2.0 RTTVAR has grown to over 2.3 seconds, decreasing to 2.0 RTTVAR has grown to over 2.3 seconds, decreasing to 2.0 Nmap scan report for localhost (127.0.0.1) Host is up (0.00023s latency). Other addresses for localhost (not scanned): 127.0.0.1 Not shown: 997 closed ports PORT STATE SERVICE 22/tcp open ssh 25/tcp open smtp 80/tcp open http Device type: general purpose Running: Linux 3.X OS CPE: cpe:/o:linux:linux_kernel:3 OS details: Linux 3.7 - 3.9 Network Distance: 0 hops OS detection performed. Please report any incorrect results at http://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 1.66 seconds #
В выводе выше мы можем в состоянии очень легко проверить открытые порты.
В случае, если Вы хотите изучить больше о сетевых команд в Linux следуйте этой статье.
IP адрес 0.0.0.0
Кстати, IP адрес 0.0.0.0 довольно интересный, так как используется в разных случаях.
Например, некоторые службы в качестве адреса привязки (bind) позволяют установить 0.0.0.0. Это означает, что служба будет прослушивать порт на всех сетевых интерфейсах данного компьютера, то есть на всех IP адресах. В некоторых службах (например, веб-сервер Apache), просто не нужно указывать никакой определённый IP адрес (в том числе 0.0.0.0) и по умолчанию они будут прослушивать входящие соединения на всех сетевых интерфейсах.
Важно понимать, что 0.0.0.0 и 127.0.0.1 это совершенно разные вещи. Хотя если в Linux пинговать 0.0.0.0, то пинги будут отправляться именно к 127.0.0.1
В Windows попытка пинга 0.0.0.0 вызовет сообщение о сбое передачи данных, то есть о недоступности адреса. Адрес 0.0.0.0 означает «любой IP данного компьютера» и включает в себя в том числе 127.0.0.1.
Адрес 0.0.0.0 обычно означает, что IP адрес ещё не настроен или не присвоен. Такой адрес указывает хост, который обращается к DHCP для получения IP адреса.
Если 0.0.0.0 указан в качестве адреса получателя, то он должен расцениваться как широковещательный адрес 255.255.255.255.
Адрес 0.0.0.0 с маской 0.0.0.0, то есть 0.0.0.0/0 используется для обозначения маршрута по умолчанию (default route).
Этот адрес не является валидным адресом для назначения сетевому интерфейсу, точно также как и вся подсеть 0.0.0.0/8 (то есть любой адрес, начинающийся с 0.).
Если в Linux обратиться к этому адресу, например, набрать в веб браузере адрес http://0.0.0.0, то откроется страница локального веб сервера (если он установлен и запущен). В Windows такой адрес вызовет ошибку о неверном адресе.
Также адрес 0.0.0.0 может использоваться для явного указания, что целевой хост недоступен.
Эта информация приведена просто для справки и для расширения кругозора, а теперь продолжаем с нашими открытыми портами.