- netstat netstat
- Синтаксис Syntax
- Параметры Parameters
- Комментарии Remarks
- Примеры Examples
- Как узнать, какой процесс прослушивает порт в Windows?
- Новый ответ, powershell
- Старый ответ, cmd
- netstat -abno
- HackWare.ru
- Этичный хакинг и тестирование на проникновение, информационная безопасность
- Как проверить открытые порты на своём компьютере. Что означают 0.0.0.0, :*, [::], 127.0.0.1. Как понять вывод NETSTAT
- Почему важно знать, какие порты открыты на компьютере?
- Как проверить открытые порты в Windows
- Как в Windows узнать, какая программа прослушивает порт
- Как проверить открытые порты в Linux. Как узнать, какая служба прослушивает порт
- Что означают данные netstat и ss
- TCP и UDP
- LISTENING, ESTABLISHED, CLOSE_WAIT и другие состояния
- UDP и LISTENING
- Пример анализа открытых портов
- Звёздочка (*) вместо адреса или порта
- Прослушиваемые порты IPv4 и IPv6 адресов в Linux
- Что означает 0.0.0.0 в netstat. Различные виды нотаций в netstat и ss
netstat netstat
Область применения: Windows Server (половина ежегодного канала), Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Windows Server 2012 Applies to: Windows Server (Semi-Annual Channel), Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Windows Server 2012
Отображаются активные TCP-подключения, порты, на которых компьютер прослушивается, статистика Ethernet, таблица маршрутизации IP-адресов, статистика IPv4 (для протоколов IP, ICMP, TCP и UDP) и Статистика IPv6 (для протоколов IPv6, ICMPv6, TCP по IPv6 и UDP через IPv6). Displays active TCP connections, ports on which the computer is listening, Ethernet statistics, the IP routing table, IPv4 statistics (for the IP, ICMP, TCP, and UDP protocols), and IPv6 statistics (for the IPv6, ICMPv6, TCP over IPv6, and UDP over IPv6 protocols). При использовании без параметров эта команда отображает активные TCP-подключения. Used without parameters, this command displays active TCP connections.
Эта команда доступна, только если протокол Internet Protocol (TCP/IP) установлен в качестве компонента в свойствах сетевого адаптера в окне Сетевые подключения. This command is available only if the Internet Protocol (TCP/IP) protocol is installed as a component in the properties of a network adapter in Network Connections.
Синтаксис Syntax
Параметры Parameters
Параметр Parameter | Описание Description |
---|---|
-a -a | Отображает все активные TCP-подключения и порты TCP и UDP, прослушиваемые компьютером. Displays all active TCP connections and the TCP and UDP ports on which the computer is listening. |
-b -b | Отображает исполняемый файл, участвующий в создании каждого подключения или порта прослушивания. Displays the executable involved in creating each connection or listening port. В некоторых случаях хорошо известные исполняемые объекты размещают несколько независимых компонентов, и в этих случаях отображается последовательность компонентов, участвующих в создании подключения или порта прослушивания. In some cases well-known executables host multiple independent components, and in these cases the sequence of components involved in creating the connection or listening port is displayed. В этом случае имя исполняемого файла находится в [] в нижней части, в верхней — это компонент, который он вызвал, и так далее, пока не достигнет TCP/IP. In this case the executable name is in [] at the bottom, on top is the component it called, and so forth until TCP/IP was reached. Обратите внимание, что этот параметр может занимать много времени и не будет работать, если у вас нет достаточных разрешений. Note that this option can be time-consuming and will fail unless you have sufficient permissions. |
-E -e | Отображает статистику Ethernet, например число отправленных и полученных байтов и пакетов. Displays Ethernet statistics, such as the number of bytes and packets sent and received. Этот параметр можно сочетать с -s. This parameter can be combined with -s. |
-n -n | Отображает активные TCP-подключения, однако адреса и номера портов выражаются в числовом виде, и для определения имен не выполняется никаких попыток. Displays active TCP connections, however, addresses and port numbers are expressed numerically and no attempt is made to determine names. |
-o -o | Отображает активные TCP-подключения и включает идентификатор процесса (PID) для каждого подключения. Displays active TCP connections and includes the process ID (PID) for each connection. Приложение, основанное на PID, можно найти на вкладке процессы в диспетчере задач Windows. You can find the application based on the PID on the Processes tab in Windows Task Manager. Этот параметр можно сочетать с параметрами -a, -n и -p. This parameter can be combined with -a, -n, and -p. |
-p |
Комментарии Remarks
Команда netstat предоставляет статистические данные по следующим параметрам: The netstat command provides statistics for the following:
Параметр Parameter | Описание Description |
---|---|
Proto Proto | Имя протокола (TCP или UDP). The name of the protocol (TCP or UDP). |
Локальный адрес Local address | IP-адрес локального компьютера и используемый номер порта. The IP address of the local computer and the port number being used. Имя локального компьютера, соответствующее IP-адресу и имя порта, отображается, если не указан параметр -n . The name of the local computer that corresponds to the IP address and the name of the port is shown unless the -n parameter is specified. Если порт еще не установлен, номер порта отображается в виде звездочки (*). If the port is not yet established, the port number is shown as an asterisk (*). |
Внешний адрес Foreign address | IP-адрес и номер порта удаленного компьютера, к которому подключен сокет. The IP address and port number of the remote computer to which the socket is connected. Имена, соответствующие IP-адресу и порту, отображаются, если не указан параметр -n . The names that corresponds to the IP address and the port are shown unless the -n parameter is specified. Если порт еще не установлен, номер порта отображается в виде звездочки (*). If the port is not yet established, the port number is shown as an asterisk (*). |
Состояние State | Указывает состояние TCP-подключения, включая: Indicates the state of a TCP connection, including:
|
Примеры Examples
Чтобы отобразить статистику Ethernet и статистику для всех протоколов, введите: To display both the Ethernet statistics and the statistics for all protocols, type:
Чтобы отобразить статистику только для протоколов TCP и UDP, введите: To display the statistics for only the TCP and UDP protocols, type:
Чтобы отобразить активные TCP-подключения и идентификаторы процессов каждые 5 секунд, введите: To display active TCP connections and the process IDs every 5 seconds, type:
Чтобы отобразить активные TCP-подключения и идентификаторы процессов в числовом формате, введите: To display active TCP connections and the process IDs using numerical form, type:
Как узнать, какой процесс прослушивает порт в Windows?
Как узнать, какой процесс прослушивает порт в Windows?
Новый ответ, powershell
Старый ответ, cmd
(Добавьте -n, чтобы остановить попытки разрешения имен хостов, что сделает его намного быстрее.)
Обратите внимание на рекомендацию датчанина для TCPView . Это выглядит очень полезно!
-a Отображает все соединения и порты прослушивания.
-b Отображает исполняемый файл, участвующий в создании каждого соединения или порта прослушивания. В некоторых случаях известные исполняемые файлы содержат несколько независимых компонентов, и в этих случаях отображается последовательность компонентов, участвующих в создании соединения или порта прослушивания. В этом случае имя исполняемого файла находится в [] внизу, вверху — компонент, который он вызвал, и так далее, пока не будет достигнут TCP / IP. Обратите внимание, что этот параметр может занять много времени и завершится ошибкой, если у вас нет достаточных разрешений.
-n Отображает адреса и номера портов в числовой форме.
-o Отображает идентификатор процесса-владельца, связанный с каждым соединением.
, чтобы затем завершить процесс, используя / F, если необходимо.
Есть родной графический интерфейс для Windows:
- Меню Пуск → Все программы → Стандартные → Системные инструменты → Монитор ресурсов
Или запустить resmon.exe , или из вкладки производительности диспетчера задач .
Используйте TCPView, если вы хотите графический интерфейс для этого. Это старое приложение Sysinternals, которое Microsoft купила.
Ключ -b, упомянутый в большинстве ответов, требует наличия прав администратора на компьютере. Вам не нужны повышенные права, чтобы получить имя процесса!
Найдите pid процесса, запущенного по номеру порта (например, 8080)
Найти имя процесса по pid
Вы можете получить больше информации, если выполните следующую команду:
Использование команды «Найти» позволяет фильтровать результаты. find /i «listening» будут отображаться только порты, которые «слушают». Обратите внимание, что вам нужно /i игнорировать регистр, иначе вы наберете find «LISTENING». | find «port» будет ограничивать результаты только теми, которые содержат конкретный номер порта. Обратите внимание, что при этом он также будет фильтровать результаты, которые имеют номер порта в любом месте строки ответа.
Откройте окно командной строки (от имени администратора). В поле «Пуск \ Поиск» введите «cmd», затем щелкните правой кнопкой мыши «cmd.exe» и выберите «Запуск от имени администратора».
Введите следующий текст и нажмите Enter.
netstat -abno
-a Отображает все соединения и порты прослушивания.
-b Отображает исполняемый файл, участвующий в создании каждого соединения или порта прослушивания. В некоторых случаях известные исполняемые файлы содержат несколько независимых компонентов, и в этих случаях отображается последовательность компонентов, участвующих в создании соединения или порта прослушивания. В этом случае имя исполняемого файла находится в [] внизу, вверху — компонент, который он вызвал, и так далее, пока не будет достигнут TCP / IP. Обратите внимание, что этот параметр может занять много времени и завершится ошибкой, если у вас нет достаточных разрешений.
-n Отображает адреса и номера портов в числовой форме.
-o Отображает идентификатор процесса-владельца, связанный с каждым соединением.
Найдите порт, который вы слушаете, в разделе «Локальный адрес».
Посмотрите на имя процесса прямо под этим.
ПРИМЕЧАНИЕ. Чтобы найти процесс в диспетчере задач
Обратите внимание на PID (идентификатор процесса) рядом с портом, который вы просматриваете.
Откройте диспетчер задач Windows.
Выберите вкладку «Процессы».
Найдите PID, который вы указали, когда выполняли netstat на шаге 1.
Если вы не видите столбец PID, нажмите View / Select Columns. Выберите PID.
Убедитесь, что выбран параметр «Показывать процессы от всех пользователей».
HackWare.ru
Этичный хакинг и тестирование на проникновение, информационная безопасность
Как проверить открытые порты на своём компьютере. Что означают 0.0.0.0, :*, [::], 127.0.0.1. Как понять вывод NETSTAT
Почему важно знать, какие порты открыты на компьютере?
Открытый порт на вашем компьютере (если не настроен файервол для запрета входящих соединений) означает, что к вашему компьютеру можно подключиться из вне.
Если с вашим компьютером случалась такая неприятность как заражение трояном, бэкдором (вирусы, которые позволяют злоумышленнику удалённо подключаться к вашему компьютеру и управлять им), то обычно такой бэкдор открывает порт и прослушивает сеть, в ожидании входящего соединения (хотя могут быть варианты).
Ещё один пример, когда нужно определить, какая именно служба прослушивает порт: вы пытаетесь установить сетевую службу (веб-сервер Apache или СУБД MySQL), а они не запускаются, так как какая-то другая служба уже заняла их порт, который они используют по умолчанию. В этом случае нужно найти эту службу и отключить её или настроить на работу с другим портом.
Но, как и во многих IT задачах (да и вообще во многих профессиональных сферах), получить данные это только самое начало. Главное — это правильно их истолковать и понять.
Поэтому в этой статье мы рассмотрим, как узнать, какие порты открыты, как проверить, какая служба прослушивает определённый порт, а также научимся правильно понимать вывод команды NETSTAT и аналогичных.
Как проверить открытые порты в Windows
В Windows есть команда netstat, которая отображает статистику протокола и текущих сетевых подключений TCP/IP.
Используя команду со следующими ключами, можно посмотреть информацию о всех подключениях и прослушиваемых портах в Windows:
Как в Windows узнать, какая программа прослушивает порт
Открытых для прослушивания портов может оказаться достаточно много и обычно они используются легитимными программами. Поэтому при анализе полученных данных также важно знать, какая именно служба прослушивает определённый порт.
Для поиска службы, можно добавить к приведённой команде опцию -b, которая означает показать исполнимый файл, прослушивающий порт:
Также имеется альтернативный способ определения исполнимого файла, привязанного к порту. Для него откройте Командную строку Windows. Для этого нажмите сочетание клавиш Win+x, там выберите Windows PowerShell (Администратор). В открывшемся окне введите:
чтобы перейти в обычную командную строку.
Там запустите команду вида:
Эта команда найдёт службы, которые прослушивают 80 порт. Чтобы найти информацию о другом порте, замените в команде цифру 80 на интересующий вас порт.
Пример вывода в моём случае:
Запись 0.0.0.0:80 означает, порт 80 для любых IPv4 адресов прослушивает служба httpd.exe (веб-сервер Apache). А запись [::]:80 — означает, что порт 80 для любых IPv6 адресов прослушивает та же самая служба httpd.exe (веб-сервер Apache). Мы ещё вернёмся к более подробному анализу данных далее в этой статье.
Менять порт в длинной команде не всегда удобно, поэтому рекомендую создать текстовый файл с именем port.bat, в этот файл скопируйте:
Сохраните и закройте этот файл.
Теперь в Windows PowerShell или в командной строке Windows с помощью команды cd перейдите в папку, куда вы сохранили файл. Например, я его сохранил в папку C:\Users\Alex\Documents\, тогда для перехода туда я выполняю:
Теперь запустите файл командой вида:
Где [ПОРТ] замените на интересующий вас порт, например, меня интересует порт 80, тогда:
Вновь получаю аналогичный результат.
Если у вас множество портов прослушивает процесс svchost.exe, то чтобы разобраться, какие именно это службы, смотрите статью «Почему svchost.exe прослушивает много портов? Как узнать, какие именно программы открыли порты».
Как проверить открытые порты в Linux. Как узнать, какая служба прослушивает порт
Для Linux тоже есть команда netstat, но она, вроде как, теперь считается устаревшей и на её замену рекомендуется команда ss. Показываемая информация у ss и netstat очень похожи. Даже основные опции идентичны.
Итак, для вывода открытых портов TCP и UDP протоколов вместе с показом процессов, которые их прослушивают, используется команда:
Больше опций, а также больше способов найти, какие порты прослушиваются, смотрите в статье «4 способа узнать, какие порты прослушиваются в Linux».
Что означают данные netstat и ss
Далее мы научимся понимать, что именно выводит netstat. Но для полного понимания нам нужно изучить немного теории — совсем кратко. Я расскажу только о том, что нам действительно понадобиться.
TCP и UDP
TCP и UDP это протоколы транспортного уровня. Самое главное что вам нужно о них знать: любой из них может использоваться для передачи информации.
Кстати, про протокол TCP вы практически наверняка слышали, по крайней мере должны были встречать запись TCP/IP — эта связка протоколов очень важна для Интернета. Протокол IP отвечает за то, куда отправлять данные, а TCP отвечает за непосредственную передачу данных и проверку их целостности.
Работу протокола TCP можно представить как создание соединения между двумя компьютерами, по этому соединению передаются данные. Внутри этого соединения данные проверяются на предмет повреждения — если какая-то часть повреждена, то она отправляется повторно.
Протокол UDP тоже передаёт данные, но вместо того, чтобы создавать устойчивое соединение, внутри которого данные проверяются на целостность, он просто «пуляет» свой пакет на определённый адрес. В принципе, это и есть главное отличие между этими протоколами.
LISTENING, ESTABLISHED, CLOSE_WAIT и другие состояния
Как вы можете увидеть в выводе команды netstat для протокола TCP доступны разные варианты состояний.
Самые популярные из них это LISTENING — означает, что порт прослушивает запущенное на данном компьютере приложение, что оно готово принять соединение, например, от другого компьютера или от другой службы, запущенной на этом же компьютере.
ESTABLISHED означает уже установленное соединение. Пример такого соединения: веб-браузер инициализировал загрузку страницы сайта и пока данные передаются по этому соединению, у этого соединения статус ESTABLISHED.
Имеются и другие виды состояний, но для наших целей они не очень важны. По большому счёту нас интересует только LISTENING, так как это означает открытые порты на нашем компьютере и возможность подключаться к нему.
UDP и LISTENING
Про UDP уже сказано чуть выше, что этот протокол не создаёт соединений в том смысле, как это делает TCP. Поэтому для этого протокола нет никаких состояний соединения — это просто неприменимо к нему. По этой причине в графе Состояние для него никогда не пишется LISTENING. Но значит ли это, что UDP порт не может быть прослушиваемым? Нет! Порт UDP также может быть прослушиваемым и доступным для соединений. В том числе этот порт может использоваться вирусами и злоумышленниками, поэтому эти порты также подлежат исследованию.
Пример анализа открытых портов
Я начну с анализа открытых портов на Linux. Просто потому, что мне так проще, а затем мы постепенно перейдём изучить открытые порты на Windows.
Пример информации об открытых портах, полученных командой:
Пример прослушиваемых портов на Linux:
В выводимых данных имеются следующие поля:
- Netid — протокол udp или tcp
- State — состояние, для протоколов TCP здесь будет LISTEN (поскольку мы явно указали в опциях показать только прослушиваемые порты), а для протоколов UDP здесь будет UNCONN, то есть состояние неизвестно, но, на самом деле, это тоже прослушиваемые порты, которые позволяют подключаться из вне
- Recv-Q — получено
- Send-Q — отправлено
- Local Address:Port — локальный адрес и порт, к которому привязана служба, то есть IP адрес и порт, которые прослушиваются
- Peer Address:Port — удалённый адрес и порт, к которым выполнено соединение.
Допустим запись 127.0.0.1:9050 для локального адреса и порта означает, что прослушивается порт 9050. Причём он прослушивается только для IP адреса 127.0.0.1. Адрес 127.0.0.1 относится к так называемым Loopback, то есть это замыкающийся на себя, закольцованный адрес. Сетевой интерфейс с этим адресом называется петлевым. Пакеты, которые отправляются с компьютера на этот адрес, приходят на этот же самый компьютер (точнее говоря, они никуда даже не уходят). Доступ к этому адресу может иметь только служба, работающая на этом же самом компьютере. Отсюда важное следствие: хотя порт 9050 прослушивается, никто другой не может к нему подключиться из любой сети. Это же относится и к адресам из диапазона ::1/128 — это такие же адреса, но уже для IPv6, тамошний аналог 127.0.0.1 это ::1 (тоже часто можно видеть в выводимой информации).
Если прослушиваются какие-либо адреса из локальных
то к таким портам могут подключиться только компьютеры, расположенные в этих самых локальных сетях (если не настроить особым образом маршрутизацию).
Звёздочка (*) вместо адреса или порта
Мы можем увидеть записи вроде *:80 или даже *:*
Здесь звёздочка означает любой адрес или любой порт. Например, *:80 в колонке Local Address:Port (Локальный адрес:Порт) означает, что прослушивается 80 порт сразу на всех сетевых интерфейсах, доступных в данной системе. То есть служба ответит на запрос к 80 порту откуда бы он не пришёл: из локальной сети, из глобальной сети (если есть прямое соединение и интерфейс с белым IP) или с закольцованного адреса — это неважно, служба всё равно примет это соединение.
Кстати, служба может прослушивать порт в соответствии со следующими правилами:
- может прослушиваться конкретный порт для одного IP адреса
- может прослушиваться конкретный порт для любого IP адреса
То есть порт должен в любом случае быть указан, поэтому для Локальный адрес:Порт допустима запись *:80, но запись вида *:* никогда не встретится в этом столбце.
Для Peer Address:Port (Удалённый адрес:Порт) запись *:* означает, что принимаются соединения от любого IP, отправленные с любого порта.
Кстати, просто для справки: если ваш компьютер подключается к веб сайту, то веб сайты обычно работают на 80 порту. Следовательно, веб браузер подключается именно к 80 порту (или 443, если это безопасное HTTPS соединение). Но на вашем компьютере открывается новое соединение на каком угодно, но только не на 80 и 443 портах — обычно используются порты с номерами >30000, например, на вашем компьютере может быть открыто исходящее соединение с портом 42063 и оно будет адресовано к 80 порту какого-либо веб сервера.
Прослушиваемые порты IPv4 и IPv6 адресов в Linux
В Linux у программ netstat и ss имеется особенность вывода информации о прослушиваемых портах, когда прослушиваются одновременно IPv4 и IPv6 адреса — выводится информация только об IPv6 адресе! Возможно это связано с какими-то глубинными особенностями реализации ядра Linux, но в Windows, например, есть чёткое разделение и если служба одновременно прослушивает порт на IPv4 и IPv6 адресах, то информация об этой службе выводится два раза — пример этого почти в самом начале статьи, где мы ищем, какая служба прослушивает 80й порт и в найденной информации нам дважды показана служба httpd.
Что означает 0.0.0.0 в netstat. Различные виды нотаций в netstat и ss
0.0.0.0 — это самый первый IP адрес. Но он относится к IP специального назначения (как например 127.0.0.1) и выполняет разные функции.
Обозначение 0.0.0.0 может иметь разное значение в зависимости от того, где используется. Когда говорят о прослушиваемых портах, это обозначение в Linux символизирует заполнитель, то есть означает «любой IP адрес».
Чем это отличается от * (звёздочки) или от записи . , которые также встречаются в выводе рассматриваемых программ? В программе ss IPv6 адрес 0:0:0:0:0:0:0:0 (который является аналогом IPv4 адреса 0.0.0.0) обозначается звёздочкой (*). Следовательно, в ss запись 0.0.0.0:* обозначает «любой IPv4 адрес с любого порта». А обозначение *:* символизирует «любой IPv6 адрес с любого порта».
В программе netstat также используется запись 0.0.0.0:* которая также обозначает «любой IPv4 адрес с любого порта».
Но в netstat для обозначения «любой IPv6 адрес с любого порта» используется . *.
Помните об этих различиях, чтобы не запутаться. А также помните о том, что если показано, что прослушивается протокол tcp6 (IPv6), то одновременно может прослушиваться порт и на tcp (IPv4) — при этом данные в выводимой информации отсутствуют!
В Windows в качестве Локального адреса, когда прослушивается любой IP адрес на определённом порту, используется запись вида 0.0.0.0:80 (в этом примере прослушивается любой IP адрес, доступный в системе, на 80 порту). Для IPv6 адресов в этом случае используется запись вида [::]:80.
В качестве внешнего адреса, когда доступно подключения с любого IP и с любого порта, для TCP протокола пишется 0.0.0.0:0, а для UDP протокола в этих же условиях пишется *:*. Что тоже не особо логично и сбивает с толку. Точнее говоря, объяснение есть и оно вытекает из разницы протоколов TCP и UDP. Но это объяснение скорее философское и в практическом плане ничего не даёт.
Если информация относится к IPv6, то для TCP когда имеется ввиду любой адрес на любом порту, используется запись вида [::]:0. А для UDP используются одинаковые нотации как для IP, так и для IPv6, то есть *:*
Нужно помнить, что некоторые из этих обозначений пересекаются с нотациями из Linux, где они имеют своё собственное значение.
Чтобы чуть облегчить жизнь, я составил такую табличку, которую можно использовать в качестве шпаргалки:
Определённый локальный IPv4 адрес на определённом порту
Любой локальный IPv4 адрес на определённом порту
Определённый локальный IPv6 адрес на определённом порту
Любой локальный IPv6 адрес на определённом порту
Любой внешний IPv4 адрес на любом порту
Любой внешний IPv6 адрес на любом порту