Почему важно знать, какие порты открыты на компьютере?
Открытый порт на вашем компьютере (если не настроен файервол для запрета входящих соединений) означает, что к вашему компьютеру можно подключиться из вне.
Если с вашим компьютером случалась такая неприятность как заражение трояном, бэкдором (вирусы, которые позволяют злоумышленнику удалённо подключаться к вашему компьютеру и управлять им), то обычно такой бэкдор открывает порт и прослушивает сеть, в ожидании входящего соединения (хотя могут быть варианты).
Ещё один пример, когда нужно определить, какая именно служба прослушивает порт: вы пытаетесь установить сетевую службу (веб-сервер Apache или СУБД MySQL), а они не запускаются, так как какая-то другая служба уже заняла их порт, который они используют по умолчанию. В этом случае нужно найти эту службу и отключить её или настроить на работу с другим портом.
Но, как и во многих IT задачах (да и вообще во многих профессиональных сферах), получить данные это только самое начало. Главное — это правильно их истолковать и понять.
Поэтому в этой статье мы рассмотрим, как узнать, какие порты открыты, как проверить, какая служба прослушивает определённый порт, а также научимся правильно понимать вывод команды NETSTAT и аналогичных.
TCP и UDP
TCP и UDP это протоколы транспортного уровня. Самое главное что вам нужно о них знать: любой из них может использоваться для передачи информации.
Кстати, про протокол TCP вы практически наверняка слышали, по крайней мере должны были встречать запись TCP/IP — эта связка протоколов очень важна для Интернета. Протокол IP отвечает за то, куда отправлять данные, а TCP отвечает за непосредственную передачу данных и проверку их целостности.
Работу протокола TCP можно представить как создание соединения между двумя компьютерами, по этому соединению передаются данные. Внутри этого соединения данные проверяются на предмет повреждения — если какая-то часть повреждена, то она отправляется повторно.
Протокол UDP тоже передаёт данные, но вместо того, чтобы создавать устойчивое соединение, внутри которого данные проверяются на целостность, он просто «пуляет» свой пакет на определённый адрес. В принципе, это и есть главное отличие между этими протоколами.
PowerShell Test-Connection
Before we take a look at how to use the cmdlet in PowerShell lets first take a quick look at .
Just like ping, uses Test-Connection also the ICMP protocol to test the network connectivity of a network device. In the simplest form, you can type or to do a quick connectivity test.
# Check connection on IP Address Test-Connection 8.8.8.8 Source Destination IPV4Address Bytes Time(ms) ------ ----------- ----------- ------- ---- lab01 8.8.8.8 8.8.8.8 32 12 lab01 8.8.8.8 8.8.8.8 32 13 lab01 8.8.8.8 8.8.8.8 32 12 lab01 8.8.8.8 8.8.8.8 32 12 # Check connection on DNS Name Test-Connection google.com
But we can of course a lot more. For example, we can test multiple destinations with one command:
Test-Connection -ComputerName 8.8.8.8, 1.1.1.1
Or specify parameters like the number of hops, buffer size or even add a delay between the pings:
Test-Connection -ComputerName 8.8.8.8 -Count 3 -Delay 2 -MaxHops 255 -BufferSize 256
Testing a remote computer
We can also test the network connection in PowerShell of a remote computer with Test-Connection. The only requirement is that your account has access to the remote computer.
Test-Connection -Source srv-lab02 -ComputerName 8.8.8.8
PowerShell Test Connection to Server
Another useful feature of PowerShell Test-Connection is that it can return $true or $false. This allows you to check if a computer is available before connecting to it. Test-Connect will return $true if any of the 4 pings are successful.
if (Test-Connection -TargetName srv-lab02 -Quiet) { New-PSSession -ComputerName srv-lab02}
How to Troubleshoot a Network Connectivity Problem with Test-NetConnection
Let’s see what we can do with the PowerShell Test-NetConnection cmdlet and look at how we can use it when we’re in the unfortunate position of troubleshooting a network connectivity problem. To demonstrate this, I’m going to use PowerShell Test-NetConnection to troubleshoot a common, real-world problem: «I can’t get to XYZ website!»
What most users don’t know is that successfully rendering a website in a browser is, itself, an amazing feat considering the number of moving pieces that have to work together to make that happen. At a minimum, the process entails:
- Having an internet connection.
- Having a route to your DNS server.
- Contacting the DNS server to resolve the URL.
- Having a route to the IP address the URL resolves to.
- Having TCP port 80 open.
- et cetera, et cetera …
PowerShell : Test-NetConnectionTest
PS C:\WINDOWS\system32> Test-NetConnection -Port 80 -computername 172.16.9.100
WARNING: TCP connect to (172.16.9.100 : 80) failed
ComputerName : 172.16.9.100
RemoteAddress : 172.16.9.100
RemotePort : 80
InterfaceAlias : vEthernet (Virtual Switch LAB)
SourceAddress : 172.16.9.100
PingSucceeded : True
PingReplyDetails (RTT) : 0 ms
TcpTestSucceeded : False
1 |
PSC\WINDOWS\system32>Test-NetConnection-Port80-computername172.16.9.100 WARNINGTCP connect to(172.16.9.10080)failed ComputerName172.16.9.100 RemoteAddress172.16.9.100 RemotePort80 InterfaceAliasvEthernet(Virtual SwitchLAB) SourceAddress172.16.9.100 PingSucceededTrue PingReplyDetails(RTT)ms TcpTestSucceededFalse |
Examples
Example 1: Send echo requests to a remote computer
This example sends echo request packets from the local computer to the Server01 computer.
uses the TargetName parameter to specify the Server01 computer. The IPv4
parameter specifies the protocol for the test.
A series of TestConnectionCommand+PingStatus objects are sent to the output stream, one
object per ping reply from the target machine.
Example 3: Use parameters to customize the test command
This example uses the parameters of to customize the command. The local computer
sends a ping test to a remote computer.
uses the TargetName parameter to specify Server01. The Count parameter
specifies three pings are sent to the Server01 computer with a Delay of 2-second intervals.
You might use these options when the ping response is expected to take longer than usual, either
because of an extended number of hops or a high-traffic network condition.
Example 4: Run a test as a background job
This example shows how to run a command as a PowerShell background job.
The command uses the cmdlet to ping many computers in an enterprise.
The value of the TargetName parameter is a command that reads a list of computer
names from the file. The command uses the cmdlet to run the command as a
background job and it saves the job in the variable.
The command is instructed to until the job is completed, and then gets the
results and stores them in the variable.
Example 5: Create a session only if a connection test succeeds
This example creates a session on the Server01 computer only if at least one of the pings sent to
the computer succeeds.
The cmdlet pings the computer, with the Quiet parameter provided.
The resulting value is if any of the four pings succeed. If none of the pings succeed,
the value is .
If the command returns a value of , the command uses the
cmdlet to create the PSSession.
Example 6: Use the Traceroute parameter
Introduced in PowerShell 6.0, the Traceroute parameter maps a route between the local computer
and the remote destination you specify with the TargetName parameter.
The command is called with the Traceroute parameter. The results, which are
objects, are output to
the Success output stream.
Perform a Trace Route
If a ping test fails, you likely will perform a Trace Route to see how far the send attempt gets before it starts failing, and would previously have used the command line tool tracert.exe. Now use Test-NetConnection along with the -ComputerName parameter and -TraceRoute switch:
PS C:\Users\aaron> Test-NetConnection -ComputerName thinkpowershell.com -TraceRoute ComputerName : thinkpowershell.com RemoteAddress : 173.236.158.197 InterfaceAlias : Ethernet 2 SourceAddress : 10.1.10.61 PingSucceeded : True PingReplyDetails (RTT) : 56 ms TraceRoute : 10.1.10.1 68.86.94.81 154.24.15.66 38.122.62.254 208.113.156.8 208.113.156.73 173.236.158.197
Что означает 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 адрес на любом порту |
|
---|---|---|---|---|---|---|
Netstat (Windows) |
127.0.0.1:9050 |
0.0.0.0:80 |
:80 |
:443 |
Для TCP: 0.0.0.0:0 Для UDP: *:* |
Для TCP: :0 Для UDP: *:* |
Netstat (Linux) |
2a02:f680:1:1100::3d:80 |
:::443 |
0.0.0.0:* |
:::* |
||
ss (Linux) |
:80 |
*:443 |
0.0.0.0:* |
*:* ИЛИ :* |
Description
The cmdlet sends Internet Control Message Protocol (ICMP) echo request packets, or
pings, to one or more remote computers and returns the echo response replies. You can use this
cmdlet to determine whether a particular computer can be contacted across an IP network.
You can use the parameters of to specify both the sending and receiving computers,
to run the command as a background job, to set a time-out and number of pings, and to configure the
connection and authentication.
Unlike the familiar ping command, returns a
TestConnectionCommand+PingStatus object that you can investigate in PowerShell. The Quiet
parameter returns a Boolean value in a System.Boolean object for each tested connection. If
multiple connections are tested, an array of Boolean values is returned.
PowerShell : Test-Connection
PS C:\WINDOWS\system32> Test-Connection 172.16.9.222 -Count 3
Source Destination IPV4Address IPV6Address Bytes Time(ms)
—— ———— ———— ———— —— ———
LAB-BOX1 172.16.9.222 172.16.9.222 fe80::61a9:fe80:c702:3bf6%6 32 0
LAB-BOX1 172.16.9.222 172.16.9.2222 fe80::61a9:fe80:c702:3bf6%6 32 0
LAB-BOX1 172.16.9.222 172.16.9.222 fe80::61a9:fe80:c702:3bf6%6 32 0
1 |
PSC\WINDOWS\system32>Test-Connection172.16.9.222-Count3 Source Destination IPV4Address IPV6Address Bytes Time(ms) —————————————————- LAB-BOX1172.16.9.222172.16.9.222fe80::61a9fe80c7023bf6%632 LAB-BOX1172.16.9.222172.16.9.2222fe80::61a9fe80c7023bf6%632 LAB-BOX1172.16.9.222172.16.9.222fe80::61a9fe80c7023bf6%632 |
Do you need a boolean value as a result?
PS C:\WINDOWS\system32> Test-Connection 172.16.9.222 -Quiet -Count 1
True
1 |
PSC\WINDOWS\system32>Test-Connection172.16.9.222-Quiet-Count1 True |
But what if we want to check if a port is open on a given host?
A simple way of checking if a port is open would be opening a telnet session
PowerShell
telnet FQDN_OR_IP PORT_NUMBER
1 | telnet FQDN_OR_IP PORT_NUMBER |
or using a port scanner like (nmap).
That can be handy for testing not just security purpose and that can be integrated into other scripts.
Checking open ports on multiple hosts:
IP range and network
Nmap example 1
nmap -PN 172.16.9.100-222
1 | nmap-PN172.16.9.100-222 |
sudo nmap -PN 172.16.9.222/24
1 | sudo nmap-PN172.16.9.22224 |
sudo nmap -PN 172.16.9.222/24
1 | sudo nmap-PN172.16.9.22224 |
Checking if specific ports are open
nmap -p 80,8080 172.16.9.100-255
1 | nmap-p80,8080172.16.9.100-255 |
Проверка активности сетевого VPN подключения
Бывает нужно автоматически после входа в систему активировать сетевое подключение с последующей проверкой его активности. В Windows PowerShell такую процедуру можно реализовать в несколько строк. Логика такая — в ИП конфигурации ищем нужный нам сетевой интерфейс, а если не находим, то активируем (подключаем) его:
# Задать паузу перед выполнением #Start-Sleep -Seconds 300 # Среди сетевых интерфейсов ищем наше VPN подключение # -Quiet Возвращает не искомую строку а false | true $net = (ipconfig | Select-String "BeeVPN" -Quiet) if ("$net" -eq 'true') { #VPN подключение активно Write-Host "BeeVPN it's connected now!" } else { #VPN подключение отключено Write-Host "BeeVPN it's disconnected now!" rasdial 'BeeVPN' '0003672402' 'password' }
Потому как каждый раз, когда запускается скрипт Windows PowerShell, оболочка, подгружая нужные ей библиотеки и функции, потребляет больше системных ресурсов для выполнения той или иной команды нежели повторное выполнение команды в уже запущенной оболочке, то ещё немного извратившись можно запустить скрипт на постоянное (циклическое) его выполнение с определённым интервалом без планировщика заданий:
×
Только после полного отключения блокировщика скриптов и рекламы на этом месте появится полезная подсказка/ссылка/код/пример конфигурации/etc!
Этот вариант скрипта Windows PowerShell после первого запуска будет постоянно пребывать в активном состоянии, засыпая на определённый интервал времени после каждой проверки активности сетевого VPN подключения, в консоль будет выдаваться сообщение о текущем статусе сетевого VPN подключения с датой и временем последней проверки, перед каждой следующей проверкой окно консоли будет очищено от предыдущих сообщений.
Если наш провайдер раздаёт динамические IP адреса, то в блок кода который выполняется при отсутствии сетевого VPN подключения можно дописать несколько строк кода которые будут отправлять нам на почту данные о конфигурации сетевых интерфейсов, дабы в случае смены IP адреса мы без труда смогли найти свой ПК в сети Интернет.
Один из представленных выше скриптов можно добавить в планировщик с его запуском при входе в систему, например через каждые 5-ть или 10-15-ть минут.
* ПРИМЕЧАНИЕ: При добавлении скрипта Windows PowerShell в планировщик заданий нужно перед полным путем к скрипту указать имя исполняемого скрипта Windows PowerShell: powershell.exe путь_к_файлу.ps1
Using Portqry.exe to test for open ports
Portqry.exe is an old tool but still works well and has extensive options for port testing. It’s much easier to use within scripts or automated checks. It can be used to check multiple ports in a single command and makes it easy to check UDP ports as well as TCP ports.
Example Portqry command to check a single port on a web server
In this example I am checking port 443 (https) of this blog:
portqry -n www.tachytelic.net -p tcp -e 443
Here you can see the test was successful:
Example Portqry to check multiple ports on a Web server
This example shows how to use Portqry to test multiple ports at the same time, in this case ports 80 and 443:
portqry -n www.tachytelic.net -p tcp -o 80,443
Again, the results are good:
Example Portqry to check an SMTP Server
Portqry is aware of some types of applications and can show you additional information returned from the server, SMTP is a good example:
portqry -n tachytelic-net.mail.protection.outlook.com -p tcp -e 25
As you can see from the screenshot, Portqry.exe returns the initial response from the SMTP Server:
Portqry.exe is excellent for scripting because of the vast number of options and that it can operate in quiet mode where it will simply return a status code, which is exactly what you would want if you were building this into a script. Portqry.exe has many options so it is well worth reading the documentation.
На какие открытые порты нужно обращать внимание
Я упоминал, что если на компьютер попала вредоносная программа, которая открыла соединение для связи со злоумышленником, то она будет прослушивать один из портов. В этом случае для TCP состояние подключения будет LISTENING. Протокол UDP является «безстатусным», поэтому для него ничего не пишется, но нужно знать, что через UDP точно также может происходить обмен информацией.
Нужно проверить, какие именно файлы и службы открыли соединение
Если исполнимый файл, открывший сетевого соединение, размещён в сомнительном месте, в папках, куда обычно не устанавливают программы, то нужно особое внимание обратить на этот файл.. Трояны и бэкдоры могут действовать двумя методами:
Трояны и бэкдоры могут действовать двумя методами:
- открывать порт и ждать подключения злоумышленника;
- самостоятельно подключаться к удалённой системе злоумышленника.
При втором варианте состояние подключения НЕ будет LISTENING — вредоносную программу можно найти только путём полного анализа всех соединений.
Как правило, службы, которые прослушивают только IP адрес 127.0.0.1, то есть слушающие на петлевых интерфейсах, предназначены для обслуживания каких-либо легитимных программ, запущенных на вашей системе.
Утилита nc (netcat).
Программа работает как в Windows, так и в Linux, только придётся её устанавливать. В Windows дистрибутив копируется в любую папку, например в папку С:\Program Files\, далее прописываем путь к запускающему файлу в переменные среды и запускаем программу в командной строке, или в командной строке прописываем полный путь к файлу и затем запускаем его. В Linux после установки програмного обеспечения, не нужно прописывать путь к запускающему файлу.
Программа позволяет принимать и отсылать данные, работать в роли простенького веб-сервера или чата.
Просканировать на наличие открытого порта:
# nc -vn 192.168.10.243 22 или диапaзона портов:# nc -vnz 192.168.10.243 0-65536
Просканировать UDP-порты:
# nc -vnzu 192.168.10.243 0-65536
Для запуска help для netcat:
# nc -h
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.).
Также адрес 0.0.0.0 может использоваться для явного указания, что целевой хост недоступен.
Это было больше просто для справки и для расширения кругозора, а теперь продолжаем с нашими открытыми портами.
Check if a remote host is listening on a certain port
If a website isn’t reachable on a remote host, or your attempt to Remote Desktop times out, you likely will want to check to see if you can reach the correct listening port on the remote host. A timeout in attempting to reach that port usually indicates the host isn’t listening on that port or a firewall is blocking the traffic attempt. Add the -Port parameter for this level of testing:
PS C:\Users\aaron> Test-NetConnection -ComputerName thinkpowershell.com -Port 443 ComputerName : thinkpowershell.com RemoteAddress : 173.236.158.197 RemotePort : 443 InterfaceAlias : Ethernet 2 SourceAddress : 10.1.10.61 PingSucceeded : True PingReplyDetails (RTT) : 44 ms TcpTestSucceeded : True
Notice that it still performs a ping test to verify the host is up and reachable, then the TCP test of the remote port.
Why writing port scanner from scratch?
Writing tools from scratch may be necessary, for instance, when we are performing pentest from a heavily restricted environment where we cannot use any typical pentesting tools.
This would be vital while testing of an isolated VDI / Citrix environment where we cannot upload anything or when we are performing a simulation of a disgruntled employee from a workstation with all the security controls in place.
In all these cases we would need to build our own tools in order for us to be able to perform basic operations such as port scanning.
Without port scanning abilities, we would hardly be able to make any progress, discover systems on the network, or perform any lateral movement for that matter.
Port scanner is simply a must and if we cannot use one, we have to make one.
Вешаем службу отвечающую по нужному порту
Как я и писал выше, пока сервисы не развернуты, то и порты никто не слушает, но нам необходимо произвести проверку, чтобы потом к этому не обращаться. Нам необходимо с помощью специальной утилиты, эмулировать прослушивание нужного нам порта (сокета), те кто из вас знает такую операционную систему, как Centos 7, то они помнят, в ней была отличная утилита под названием netcat. Она позволяла с помощью определенных команд слушать нужный администратору порт.netcat — утилита Unix, позволяющая устанавливать соединения TCP и UDP, принимать оттуда данные и передавать их. На Windows платформах, она так же присутствует.
Скачать netcat для Windows можно вот тут
Распаковываем архив на сервере, где в будущем будет работать служба. В папке вам будут необходимы файлы nc.exe и nc64.exe. Далее зажимаете Shift и щелкаете правым кликом по папке, из контекстного меню выбираете пункт «Открыть окно команд»
Теперь представим, что я хочу чтобы на сервере работал 80 порт, ну типа IIS сервер. Открываем netcat, для начала посмотрите справку:
- -d detach from console, background mode
- -e prog inbound program to exec
- -g gateway source-routing hop point, up to 8
- -G num source-routing pointer: 4, 8, 12, …
- -h this cruft
- -i secs delay interval for lines sent, ports scanned
- -l — слушать входящие соединения
- -L listen harder, re-listen on socket close
- -n numeric-only IP addresses, no DNS
- -o file hex dump of traffic
- -p — какое соединение будет прослушивать
- -r randomize local and remote ports
- -s — задать локальный адрес назначения
- -t answer TELNET negotiation
- -c send CRLF instead of just LF
- -u — UDP режим
- -v verbose
- -w secs timeout for connects and final net reads
- -z zero-I/O mode
Нас интересует команда вот такого вида:
netcat-win32-1.12>nc.exe -l -p 80
В результате чего, на сервере поднимается виртуальный сокет, который слушает 80 соединение, симулируя веб сервер.
Как в Windows узнать, какая программа прослушивает порт (используя CMD)
Открытых для прослушивания портов может оказаться достаточно много и обычно они используются легитимными программами
Поэтому при анализе полученных данных также важно знать, какая именно служба прослушивает определённый порт.. Для поиска службы, можно добавить к приведённой команде опцию -b, которая означает показать исполнимый файл, прослушивающий порт:
Для поиска службы, можно добавить к приведённой команде опцию -b, которая означает показать исполнимый файл, прослушивающий порт:
netstat -anb
Также имеется альтернативный способ определения исполнимого файла, привязанного к порту. Для него откройте Командную строку Windows. Для этого нажмите сочетание клавиш Win+x, там выберите Windows PowerShell (Администратор). В открывшемся окне введите:
cmd
чтобы перейти в обычную командную строку.
Там запустите команду вида:
for /f "tokens=1,2,3,4,5*" %i in ('netstat -aon ^| findstr ":80" ^| findstr /i listening') do echo %j %l & @tasklist | findstr %m
Эта команда найдёт службы, которые прослушивают 80 порт. Чтобы найти информацию о другом порте, замените в команде цифру 80 на интересующий вас порт.
Пример вывода в моём случае:
C:\Windows\system32>echo 0.0.0.0:80 LISTENING & 0.0.0.0:80 LISTENING httpd.exe 3576 Services 0 16 764 КБ C:\Windows\system32>echo :80 LISTENING & :80 LISTENING httpd.exe 3576 Services 0 16 764 КБ
Запись 0.0.0.0:80 означает, порт 80 для любых IPv4 адресов прослушивает служба httpd.exe (веб-сервер Apache). А запись :80 — означает, что порт 80 для любых IPv6 адресов прослушивает та же самая служба httpd.exe (веб-сервер Apache). Мы ещё вернёмся к более подробному анализу данных далее в этой статье.
Менять порт в длинной команде не всегда удобно, поэтому рекомендую создать текстовый файл с именем port.bat, в этот файл скопируйте:
@ECHO OFF for /f "tokens=1,2,3,4,5*" %%i in ('netstat -aon ^| findstr ":%1" ^| findstr /i listening') do echo %%j %%l & @tasklist | findstr %%m
Сохраните и закройте этот файл.
Теперь в Windows PowerShell или в командной строке Windows с помощью команды cd перейдите в папку, куда вы сохранили файл. Например, я его сохранил в папку C:\Users\Alex\Documents\, тогда для перехода туда я выполняю:
cd C:\Users\Alex\Documents\
Теперь запустите файл командой вида:
.\port.bat
Где замените на интересующий вас порт, например, меня интересует порт 80, тогда:
.\port.bat 80
Вновь получаю аналогичный результат.
Если у вас множество портов прослушивает процесс svchost.exe, то чтобы разобраться, какие именно это службы, смотрите статью «Почему svchost.exe прослушивает много портов? Как узнать, какие именно программы открыли порты».
Какие порты бывают?
Порты являются виртуальными путями, по которым информация передается от компьютера к компьютеру. Всего есть 65536 портов на выбор..
Порты 0 до 1023 — Самые известные номера портов. Наиболее популярные службы работающие на портах: база данных MS SQL (1433), почтовые услуги POP3 (110), IMAP (143), SMTP (25), веб-сервисы HTML (80).
Порты от 1024 до 49151 — зарезервированные порты; это означает, что они могут быть зарезервированные для конкретных протоколов программного обеспечения.
Порты 49152 по 65536 — динамические или частные порты; это означает, что они могут быть использованы кем угодно.