Как узнать, какая программа использует порт в Windows.

Определить, какое приложение занимает (слушает) тот или иной порт, требуется не часто. Обычно необходимость диктуют ошибки в устанавливаемых приложениях. Чаще всего это Skype, VMWare, и сборки веб-разработчиков, например XAMPP или OpenServer.

Для поиска занимающих порты приложений можно воспользоваться приложениями, например SysInternals Process Explorer, Sysinternals TCPView, Nirsoft CurrPorts. Однако, в нужный момент их может просто не оказаться под рукой и здесь нам на помошь придут интегрированные компоненты Windows.

В состав Windows входит консольная утилита netstat. Запустив её с параметром /?, вы увидите, что предназначена она для отображения статистики и активных соединений протокола TCP/IP, а также полный перечень её опций: Из этого перечня нас интересуют в первую очередь эти:

  • -a - отображать все соединения и используемые порты.
  • -o - отображать числовой идентификатор процесса, отвечающего за конкретное соединение (Process ID, или попросту PID).
  • -n - указывает утилите netstat отображать реальные айпи адреса и цифровые значения портов вместо из DNS-имен и общепринятых псевдонимов. В ряде случаев это может оказаться полезным.

Запустим netstat командой

Netstat -ao

У меня вывод выглядит так:

В выведенном списке ищем строку, в которой упоминается об использовании на нашем компьютере 127.0.0.1 порта с номером 5037. Это 11 сверху строка. В последней колонке видим, что порт использует приложение с id=8768. Отлично, найдем, кто же это!

Не покидая командной строки, вы можете быстро выяснить, что такое процесс 8768.

tasklist | find "8768"

Как гласят результаты вывода данных команды, наш виновник это

adb.exe 8768 Console 3 8 336 КБ

Собственно, задача рашена. Приложение надо или завершить или сбить. Для этого нам понадобится диспетчер задач Windows, им пользоваться умеют все.

Кстати, "Диспетчер задач" тоже поможет определить приложение по номеру его процесса. Запустите Менеджер задач, нажав CTRL+SHIFT+ESC, перейдите на вкладку "Процессы". В меню "Вид" выберите пункт "Выбрать столбцы", и отметьте столбец PID: Нужный процесс можно найти по значению этого столбца.

От имени администратора в командной строке набери команду:

Netstat -ab

Поскольку список может быть довольно большой, то лучше вывести всё это дело в какой-нибудь файл. Например, так:

Netstat -ab > ports.txt

В файле искать будет проще.

Подробное объяснение

Да вообще программ для подобных целей полно, любой брандмауер/фаервол может это отобразить. Ну если необходимо решить задачу именно стандартными средствами ОС Windows, то можно воспользоваться консольной программой netstat.

Удобно использовать с ключом -b (netstatn -b), таким образом будет выведен список не только открытых портов, но и приложений, которые эти порты используют, а так же будут указаны активные подключения, сетевые адреса (внутренние и внешние) с сетевыми портами, идентификаторы процессов использовавших конкретный порт (PID) и их названия.

А вообще советую почитать справку по этой утилите, набрав в консоле (она же cmd) команду netstat /? Там много полезной информации написано, в том числе и по ключам, с помощью которых можно детализировать списки вывода информации не только по сетевым портам.

Отображение статистики протокола и текущих сетевых подключений TCP/IP.

NETSTAT [-a] [-b] [-e] [-n] [-o] [-p протокол] [-r] [-s] [-v] [интервал]

A Отображение всех подключений и ожидающих портов.
-b Отображение исполняемого файла, участвующего в создании каждого подключения, или ожидающего порта. Иногда известные исполняемые файлы содержат множественные независимые компоненты. Тогда отображается последовательность компонентов, участвующих в создании подключения, либо ожидающий порт. В этом случае имя исполняемого файла находится снизу в скобках , сверху - компонент, который им вызывается, и так до тех пор, пока не достигается TCP/IP. Заметьте, что такой подход может занять много времени и требует достаточных разрешений.
-e Отображение статистики Ethernet. Он может применяться вместе
с параметром -s.
-n Отображение адресов и номеров портов в числовом формате.
-o Отображение кода (ID) процесса каждого подключения.
-p протокол Отображение подключений для протокола, задаваемых этим
параметром. Допустимые значения: TCP, UDP, TCPv6 или UDPv6.
Используется вместе с параметром -s для отображения статистики
по протоколам. Допустимые значения: IP, IPv6, ICMP, ICMPv6,
TCP, TCPv6, UDP или UDPv6
-r Отображение содержимого таблицы маршрутов.
-s Отображение статистических данных по протоколам. По умолчанию
данные отображаются для IP, IPv6, ICMP, ICMPv6, TCP, TCPv6, UDP
и UDPv6. Параметр -p позволяет указать подмножество выводящихся
данных.
-v При использовании с параметром -b, отображает последовательность компонентов, участвующих в создании подключения, или ожидающий порт для всех исполняемых файлов.
интервал Повторный вывод статистических данных через указанный
промежуток времени в секундах. Для прекращения вывода данных
нажмите клавиши CTRL+C. Если параметр не задан, сведения о
текущей конфигурации выводятся один раз.

Если есть всё же есть возможность, то лучше воспользоваться сторонними программами ибо так удобнее. Например утилита Tcpview Марка Руссиновича покажет детальную информацию о сетевых портах, при этом в режиме реального времени будет ещё и мониторить всё это.

Если порт открыт это означает, что какая либо программа (например сервис) использует его для связи с другой программой через интернет или в локальной системе. Чтобы посмотреть какие порты открыты в вашей системе Linux можно использовать команду netstat. В выводе будут показаны все сервисы и прослушиваемые ими порты и ip адреса.

sudo netstat -ntulp Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 2392/smbd
tcp 0 0 0.0.0.0:9518 0.0.0.0:* LISTEN 2894/skype
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 2896/vlc
tcp 0 0 127.0.0.1:3493 0.0.0.0:* LISTEN 2467/upsd
...

  • -l или —listening — посмотреть только прослушиваемые порты
  • -p или —program — показать имя программы и ее PID
  • -t или —tcpпоказать tcp порты
  • -u или —udp показать udp порты
  • -n или —numeric показывать ip адреса в числовом виде

Способ 2 lsof

Утилита lsof позволяет посмотреть все открытые в системе соединения, в том числе и сетевые, для этого нужно использовать опцию i.

dhcpcd 2136 root 6u IPv4 4986 0t0 UDP *:bootpc
hamachid 2323 root 8u IPv4 5587 0t0 TCP 192.168.1.2:35445->212.118.234.65:https (ESTABLISHED)
smbd 2392 root 27u IPv6 5624 0t0 TCP *:microsoft-ds (LISTEN)
sshd 2421 root 3u IPv4 6196 0t0 TCP *:ssh (LISTEN)
upsd 2467 nut 4u IPv4 6235 0t0 TCP comm-app.local:nut (LISTEN)

Еще один пример, смотрим какие процессы работают с портом 80:

sudo lsof -i | grep 80

ntpd 2213 root 23u IPv6 5422 0t0 UDP :ntp
ntpd 2213 root 27u IPv6 5598 0t0 UDP :ntp
skype 2894 serigy 87u IPv4 7080 0t0 TCP *:9518 (LISTEN)
chrome 3114 sergiy 122u IPv4 31904 0t0 TCP 192.168.1.2:47804->srv118-131-240-87.vk.com:https (ESTABLISHED)

Способ 3. nmap

Nmap — мощный сетевой сканер, разработанный для сканирования и пентестинга удаленных узлов, но ничего не мешает направить его на локальный компьютер:

Starting Nmap 6.47 (http://nmap.org) at 2015-08-02 17:27 EEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00036s latency).
Other addresses for localhost (not scanned): 127.0.0.1 127.0.0.1 127.0.0.1 127.0.0.1 127.0.0.1 127.0.0.1
rDNS record for 127.0.0.1: comm-app.local
Not shown: 995 closed ports
PORT STATE SERVICE
22/tcp open ssh
139/tcp open netbios-ssn
445/tcp open microsoft-ds
3493/tcp open nut
8080/tcp open http-proxy

Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds

Если вы хотите посмотреть какие порты на компьютере доступны снаружи, здесь тоже пригодится Nmap. Если компьютер — общедоступный сервер, то результат скорее всего не будет отличатся от локального сканирования, но на домашнем компьютере все немного по другому. Первый вариант — используется роутер и в сеть будут видны только порты роутера, еще одним порогом защиты может стать NAT сервер провайдера. Технология NAT позволяет нескольким пользователям использовать один внешний IP адрес. И так для просмотра открытых внешних портов сначала узнаем внешний ip адрес, для надежности воспользуемся онлайн сервисом:

nmap 178.93.149.50

В результате мы можем получить открытый порт 80 веб сервера, или даже 21 — файлового сервера, которых мы не устанавливали, эти порты открыты роутером, 80 — для веб-интерфейса, а 21 для может использоваться для обновления прошивки. А еще можно вообще не получить результатов, это будет означать что все порты закрыты, или на сервере установлена система защиты от вторжений IDS.

Компьютерные порты по принципу своей работы очень похожи на порты обыкновенные, те самые, которые можно встреть в любом городе с развитой водной транспортной инфраструктурой.

Недаром эти два слова являются омонимами.

С этой точки зрения компьютер представляется ничем иным как городом, а еще лучше страной с множеством портов, а программы, имеющие доступ в Интернет – судами с полезным или опасным грузом (тут уж всякое бывает).

Портом компьютерным и портом как местом на берегу моря помимо явного назначения еще в том заключается, что суда, если их размеры тому позволяют, могут в разные порты входить, а вот программы только к определенным портам подключаться.



Многие браузеры, к примеру, используют порт под номером 80, в то время как могут использовать два порта, а именно номер 25 для отправки почты и номер 110 для приема.

Так вот, иногда у пользователей возникает необходимость узнать, какой порт использует какая программа. А узнать это весьма просто. Для этих целей можно воспользоваться специальными утилитами типа TCPView либо же самой обыкновенной командной строкой. Запустите консоль от имени администратора и выполните вот такую команду:
netstat /?





При этом откроется краткое описание команды и список доступных параметров. Например, использование netstat с ключом –а выведет список всех подключений и портов прослушивания, ключ –o откроет доступ к ID каждого процесса, а ключ –b покажет исполняемый файл, участвующий в создании подключения, что собственно нами и нужно. Для просмотра адресов и номеров портов также можно использовать ключ –N .

Итак, выполняем команду netstat –a –n –o и смотрим, что получилось. Мы получили список активных подключений с указанием протокола, локального и внешнего адресов, состояния и идентификатора. Как узнать, к примеру, какому файлу принадлежит ID 2248? Можно расширить команду добавим в нее ключ –b или тут же выполнить другую команду tasklist | find "2248" . Вот все так просто.