Как проверить открытый TCP

Команда netstat
, входящая в стандартный набор сетевых инструментов UNIX, отображает различную network–related информацию, такую как сетевые подключения, статистику интерфейсов, таблицы маршрутизации, masquerade, multicast, и т.п.

В этой статье рассмотрим десять практических примеров использования команды netstat в Linux
.

Certain apps and processes in Windows 10 can cause problems if you’re not properly connected to the internet. Firewalls can cause these connection issues when they cannot determine whether incoming and outgoing connections pose a threat. Work around this issue and open ports for incoming and outgoing connections. We will know to check whether a TCP port is open or closed on the Windows operating system.

Basically, many times we need to check the port status when any of the below issues results in closing the port.

  1. They may not be properly working.
  2. External IP addresses that are in use may be set to private IPs.
  3. Firewall rules may block the network.

There are several ways to check open TCP/IP
ports in Windows. Here are a few options:

Windows Netstat Command to Check Open Ports in Windows

In this tutorial, we will learn how to run the netstat
command to check open ports in Windows Operating System. We will also look at command options and how to use the findstr
command (similar to grep) to filter the netstat output.

 netstat -aon 

The command displays lots of information. What you should pay attention to are Local Addresses
that are in the LISTENING
state.

check if port is open windows

As you can see in the previous screenshot, In my Windows 10 computer, port 22 (SSH) is open.

 netstat -aon | findstr /i listening 
listening ports windows firewall

The Foreign Address column of the output shows the IP address and port of the computer/server at the remote end of the connection.

 telnet IP_ADDRESS 22 

Replace IP_ADDRESS with the actual IP Address of the Windows computer.

check if port is open from a remote computer

Filtering netstat using findstr

 netstat -a | findstr /i TIME_WAIT 

The /I
option is for the case insensitive matching.

cmd netstat command to check open ports in windows

Command Options

Windows netstat command, without any command-line arguments, displays active TCP connections.

It also includes some useful command options to show network connections and ports in various forms, such as show connections and opened ports based on the protocol, find the process id of a connection/port, view network statics, and find the application that utilizes connections and ports.

Examples: Using the netstat command

List all Active TCP connections:

 netstat 

Check open ports:

 netstat -aon | findstr /i listening 

Only want to see information about TCP protocol:

 netstat -a -p tcp 

Show network statistics:

 netstat -s 
 netstat -n 5 

If you need more information about the Windows netstat command, type netstat \?
in the command prompt.


Почему важно знать, какие порты открыты на компьютере?

Открытый порт на вашем компьютере (если не настроен файервол для запрета входящих соединений) означает, что к вашему компьютеру можно подключиться из вне.

Если ваш компьютер заражён вредоносным программным обеспечением, таким как троян, бэкдор (вирусы, которые позволяют злоумышленнику удалённо подключаться к вашему компьютеру и управлять им), то обычно такой бэкдор открывает порт и прослушивает сеть, в ожидании входящего соединения. Хотя могут быть варианты, например, многие бэкдоры подключаются к компьютеру злоумышленника и ожидают команд — в этом случае правильнее говорить не об открытом порте, а об установленном соединении. Это распространённый способ поведения вредоносного ПО, поскольку в данном случае не требуется, чтобы у жертвы был белый IP (что для домашних компьютеров является редкостью). Поэтому важно проверять открытые порты и установленные сетевые соединения. Конечно, установленное соединение означает наличие открытого порта, но с технической точки зрения это всё-таки разные вещи.

Ещё один пример, когда нужно определить, какая именно служба прослушивает порт: вы пытаетесь установить сетевую службу (веб-сервер Apache или СУБД MySQL), а они не запускаются, так как какая-то другая служба уже заняла их порт, который они используют по умолчанию. В этом случае нужно найти эту службу и отключить её или настроить на работу с другим портом.

Но, как и во многих IT задачах (да и вообще во многих профессиональных сферах), получить данные это только самое начало. Главное — это правильно их истолковать и понять.

Поэтому в этой статье мы рассмотрим, как узнать, какие порты открыты, как проверить, какая служба прослушивает определённый порт, а также научимся правильно понимать вывод команды NETSTAT и аналогичных.

Пример анализа открытых портов

Я начну с анализа открытых портов на Linux. Просто потому, что мне так проще, а затем мы постепенно перейдём изучить открытые порты на Windows.

Пример информации об открытых портах, полученных командой:

 sudo ss -tulpn 

Пример прослушиваемых портов на Linux:

 Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 10.0.2.15%enp0s3:68 0.0.0.0:* users:(("NetworkManager",pid=318,fd=17))
udp UNCONN 0 0 127.0.0.1:5300 0.0.0.0:* users:(("tor",pid=359,fd=7))
tcp LISTEN 0 128 127.0.0.1:9040 0.0.0.0:* users:(("tor",pid=359,fd=8))
tcp LISTEN 0 128 127.0.0.1:8118 0.0.0.0:* users:(("privoxy",pid=362,fd=3))
tcp LISTEN 0 128 127.0.0.1:9050 0.0.0.0:* users:(("tor",pid=359,fd=6))
tcp LISTEN 0 128 127.0.0.1:9475 0.0.0.0:* users:(("httpd",pid=553,fd=5),("httpd",pid=552,fd=5),("httpd",pid=551,fd=5),("httpd",pid=550,fd=5),("httpd",pid=549,fd=5),("httpd",pid=360,fd=5))
tcp LISTEN 0 128 *:80 *:* users:(("httpd",pid=553,fd=4),("httpd",pid=552,fd=4),("httpd",pid=551,fd=4),("httpd",pid=550,fd=4),("httpd",pid=549,fd=4),("httpd",pid=360,fd=4))
tcp LISTEN 0 128 *:22 *:* users:(("systemd",pid=1,fd=55))
tcp LISTEN 0 128 *:443 *:* users:(("httpd",pid=553,fd=7),("httpd",pid=552,fd=7),("httpd",pid=551,fd=7),("httpd",pid=550,fd=7),("httpd",pid=549,fd=7),("httpd",pid=360,fd=7))
tcp LISTEN 0 80 *:3306 *:* users:(("mysqld",pid=427,fd=21)) 

В выводимых данных имеются следующие поля:

  • 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, в IPv6 аналог для 127.0.0.1 это ::1
(тоже часто можно видеть в выводимой информации).

Если прослушиваются какие-либо адреса из локальных

  • 10.0.0.0/8
  • 172.16.0.0/12
  • 192.168.0.0/16
  • 127.0.0.0/8

то к таким портам могут подключиться только компьютеры, расположенные в этих самых локальных сетях (если не настроить особым образом маршрутизацию или проброску портов (port forwarding)).

Для вывода прослушиваемых портов и уже установленных сетевых подключений используйте следующую команду:

 sudo ss -tupn 

Прослушиваемые порты IPv4 и IPv6 адресов в Linux

В Linux у программ netstat
и ss
имеется особенность вывода информации о прослушиваемых портах, когда прослушиваются одновременно IPv4 и IPv6 адреса — выводится информация только об IPv6 адресе! Возможно это связано с какими-то глубинными особенностями реализации ядра Linux, но в Windows, например, есть чёткое разделение и если служба одновременно прослушивает порт на IPv4 и IPv6 адресах, то информация об этой службе выводится два раза — пример этого почти в самом начале статьи, где мы ищем, какая служба прослушивает 80-й порт и в найденной информации нам дважды показана служба httpd.

Как в Windows узнать, какая программа прослушивает порт (с помощью PowerShell)

В этом примере будет получено имя процесса, связанного с каждым открытым портом:

 Get-NetTcpConnection -State Listen | Select-Object LocalAddress,LocalPort,OwningProcess,@{Name="Process";Expression={(Get-Process -Id $_. OwningProcess). ProcessName}} | Sort-Object -Property LocalPort | Format-Table 

Как проверить открытый TCP

Эта команда покажет все процессы связанные с любой сетевой активностью (открытые порты, а также установленные соединения и другие статусы):

 Get-NetTcpConnection | Select-Object LocalAddress,LocalPort,OwningProcess,@{Name="Process";Expression={(Get-Process -Id $_. OwningProcess). ProcessName}} | Sort-Object -Property LocalPort | Format-Table 

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

 $port='80';
Get-NetTcpConnection -State Listen | Where-Object {$_. LocalPort -eq "$port"} | Select-Object LocalAddress,LocalPort,OwningProcess,@{Name="Process";Expression={(Get-Process -Id $_. OwningProcess). ProcessName}} | Sort-Object -Property LocalPort | Format-Table 

Как проверить открытый TCP

Замените «80» в первой строке на порт, который вас интересует.

:/>  Как выглядит кнопка далее

Чтобы просмотреть идентификатор процесса-владельца используемого порта UDP, запустите команду:

 Get-NetUDPEndpoint | Select-Object LocalAddress,LocalPort,OwningProcess | Sort-Object -Property LocalPort | Format-Table 

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

 Get-NetUDPEndpoint | Select-Object LocalAddress,LocalPort,OwningProcess,@{Name="Process";Expression={(Get-Process -Id $_. OwningProcess). ProcessName}} | Sort-Object -Property LocalPort | Format-Table 

Windows PowerShell

 Get-NetTCPConnection |
Select-Object LocalAddress,
LocalPort, RemoteAddress, RemotePort 

Как проверить открытый TCP

Как проверить открытые порты в Linux. Как узнать, какая служба прослушивает порт

Для Linux тоже есть команда netstat
, но она, вроде как, теперь считается устаревшей и на её замену рекомендуется команда  ss
. Показываемая информация у ss
и netstat
очень похожи. Даже основные опции идентичны.

Итак, для вывода открытых портов TCP и UDP протоколов вместе с показом процессов, которые их прослушивают, используется команда:

 sudo ss -tulpn 

Как проверить открытый TCP

Чтобы вывести список установленных соединений для портов TCP и UDP, используйте команду:

 sudo ss -tupn 

Больше опций, а также больше способов найти, какие порты прослушиваются, смотрите в статье « 4 способа узнать, какие порты прослушиваются в Linux
».

Using Telnet Client

Step 1:
Check whether the telnet client feature is ON or not. In order to check, open the Turn Windows feature on or off settings from the search bar. O R press the ‘window’ key and type ‘windows’ features. Then press on “Turn Windows features on or off”.

Как проверить открытый TCP

Windows Features Option

A new prompt will be opened. Search for “Telnet Client” and check the box in front of ‘telnet Client’.

Как проверить открытый TCP

Step 2:
Open the command prompt. Press the ‘windows’ key and type ‘cmd’. Press “Command Prompt”.

Как проверить открытый TCP

Command Prompt Option

Step 3:
On the command prompt, type the command “telnet + IP address or hostname + port number” and check the status of the provided TCP port.

Как проверить открытый TCP

Step 4:
If only the blinking cursor is visible, then the port is open.

Как проверить открытый TCP

Port is Open

Step 5:
If you get the message “connection failed” then the port is closed.

Как проверить открытый TCP

Port is close

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

Открытых для прослушивания портов может оказаться достаточно много и обычно они используются легитимными программами. Поэтому при анализе полученных данных также важно знать, какая именно служба прослушивает определённый порт.

Для поиска службы, можно добавить к команде NETSTAT
опцию -b
, которая означает показать исполнимый файл, прослушивающий порт:

 netstat -anb 

Как проверить открытый TCP

Также имеется альтернативный способ определения исполнимого файла, привязанного к порту. Для него откройте Командную строку Windows. Для этого нажмите сочетание клавиш Win+x
, там выберите Windows PowerShell (Администратор)
. В открывшемся окне введите:

 cmd 

чтобы переключиться на Windows Console Host (обычную командную строку).

Там запустите команду вида:

 for /f "tokens=1,2,3,4,5*" %i in ('netstat -aon ^| findstr ":80" ^| findstr /i listening') do echo %j %l & @tasklist | findstr %m 

Как проверить открытый TCP

Эта команда найдёт службы, которые прослушивают 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 КБ 

Менять порт в длинной команде не всегда удобно, поэтому рекомендую создать текстовый файл с именем 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 

Сохраните и закройте этот файл.

 cd C:\Users\Alex\Documents\ 

Теперь запустите файл командой вида:

 .\port.bat ПОРТ 

Где ПОРТ 
замените на интересующий вас порт, например, меня интересует порт 80, тогда:

 .\port.bat 80 

Вновь получаю аналогичный результат.

Как проверить открытый TCP

Если у вас множество портов прослушивает процесс svchost.exe, то чтобы разобраться, какие именно это службы, смотрите статью « Почему svchost.exe прослушивает много портов? Как узнать, какие именно программы открыли порты
».

Как проверить открытые порты в Windows

В Windows есть команда netstat
, которая отображает статистику протокола и текущих сетевых подключений TCP/IP.

 NETSTAT [-a] [-b] [-e] [-f] [-n] [-o] [-p протокол] [-r] [-s] [-x] [-t] [интервал] 
 -a Отображение всех подключений и портов прослушивания. -b Отображение исполняемого файла, участвующего в создании каждого подключения или порта прослушивания. Иногда известные исполняемые файлы содержат множество независимых компонентов. Тогда отображается последовательность компонентов, участвующих в создании подключения или порта прослушивания. В этом случае имя исполняемого файла находится снизу в скобках [], сверху находится вызванный им компонент, и так до тех пор, пока не достигнут TCP/IP. Заметьте, что такой подход может занять много времени и требует достаточных разрешений. -e Отображение статистики Ethernet. Может применяться вместе с параметром -s. -f Отображение полного имени домена (FQDN) для внешних адресов. -n Отображение адресов и номеров портов в числовом формате. -o Отображение ИД процесса каждого подключения. -p протокол Отображение подключений для протокола, задаваемых этим параметром. Допустимые значения: TCP, UDP, TCPv6 или UDPv6. Если используется вместе с параметром -s для отображения статистики по протоколам, допустимы следующие значения: IP, IPv6, ICMP, ICMPv6, TCP, TCPv6, UDP или UDPv6. -q Отображение всех подключений, портов прослушивания и ограниченных непрослушивающих TCP-портов. Ограниченные непрослушивающие порты могут быть или не быть связанными с активными подключениями -r Отображение содержимого таблицы маршрутов. -s Отображение статистики по протоколам. По умолчанию статистика отображается для протоколов IP, IPv6, ICMP, ICMPv6, TCP, TCPv6, UDP и UDPv6. Параметр -p позволяет указать подмножество выводимых данных. -t Отображение состояния разгрузки для текущего подключения. -x Отображение подключений, прослушивателей и общих конечных точек NetworkDirect. -y Отображение шаблона подключений TCP для всех подключений. Не может использоваться вместе с другими параметрами. interval Повторное отображение выбранной статистики с паузой между отображениями, заданной интервалом в секундах. Чтобы прекратить повторное отображение статистики, нажмите клавиши CTRL+C. Если этот параметр опущен, netstat напечатает текущую информацию о конфигурации один раз. 

Используя команду со следующими ключами, можно посмотреть информацию о всех подключениях и прослушиваемых портах в Windows:

 netstat -an 

Как проверить открытый TCP

Как заблокировать доступ к портам на компьютере?

Для настройки доступа к портам используйте файервол (в Windows называется Брандмауэр).

Многие антивирусы сейчас имеют файерволы. Настройки для входящих подключений регулируют, к каким службам, прослушивающим порт, разрешено подключаться. Эти правила не подействуют, если какая-либо служба сама инициирует соединение — для таких случаев настраиваются правила для исходящих подключений.

Если какая-то программа кроме системной просит выход в сеть, то вы должны понимать, зачем ей это нужно.

Чтобы открыть « Брандмауэр Защитника Windows
» выполните в командной строке:

 Firewall.cpl 

Чтобы открыть « Монитор брандмауэра Защитника Windows в режиме повышенной безопасности
» (правильнее было бы всё-таки сказать «продвинутой безопасности», а не «повышенной»), в командной строке выполните:

 WF.msc 

Как проверить открытый TCP

Чтобы открыть « Разрешение обмена данных с приложениями в брандмауэре Защитника Windows
» выполните:

 explorer 'shell:::{4026492F-2F69-46B8-B9BF-5654FC07E423} -Microsoft. WindowsFirewall\pageConfigureApps' 

Как проверить открытый TCP

Netstat -lnptux

Резюмируем вышеописанное и объединим ключи в одну полезную команду, которая покажет:

  • -l
    все открытые порты (LISTEN)
  • -t
    по протоколу TCP
  • -u
    по протоколу UDP
  • -x
    по протоколу UNIX Socket
  • -n
    без резолва IP/имён
  • -p
    но с названиями процессов и PID-ами

Примечание: Не все процессы могут быть идентифицированы последним ключом, чужие процессы показаны не будут. Вы должны иметь права root чтобы увидеть всё.

 # netstat -lnptux
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:80 0.0.0.0:* LISTEN 9614/nginx
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 601/sshd
udp 0 0 8.8.4.4:123 0.0.0.0:* 574/ntpd
udp 0 0 127.0.0.1:123 0.0.0.0:* 574/ntpd
udp 0 0 0.0.0.0:123 0.0.0.0:* 574/ntpd
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node PID/Program name Path
unix 2 [ ACC ] STREAM LISTENING 4233 826/python /var/run/fail2ban/fail2ban.sock
unix 2 [ ACC ] STREAM LISTENING 8122 2561/mysqld /var/run/mysqld/mysqld.sock
unix 2 [ ACC ] STREAM LISTENING 160413 7301/php-fpm.conf /var/run/php5-fpm.sock 

Сетевые интерфейсы

Показать список сетевых интерфейсов: netstat -i

 # netstat -i
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 0 1911037 0 0 0 1382056 0 0 0 BMRU
lo 16436 0 0 0 0 0 0 0 0 0 LRU 

Показать расширенную информацию об интерфейсах (аналогично ifconfig): netstat -ie

 # netstat -ie
Kernel Interface table
eth0 Link encap:Ethernet HWaddr 00:0c:29:68:4c:a4 inet addr:192.168.128.134 Bcast:192.168.128.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe68:4ca4/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:24278 errors:0 dropped:0 overruns:0 frame:0 TX packets:11275 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:33203025 (33.2 MB) TX bytes:665822 (665.8 KB) Interrupt:19 Base address:0x2000 

IP адрес 0

Кстати, IP адрес 0.0.0.0 довольно интересный, так как используется в разных случаях.

:/>  Команда для блокировки экрана на клавиатуре и 7 способов сделать игру во весь экран в Windows

Например, некоторые службы в качестве адреса привязки (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 такой адрес вызовет ошибку о неверном адресе.

Как проверить открытый TCP

Также адрес 0.0.0.0 может использоваться для явного указания, что целевой хост недоступен.

Эта информация приведена просто для справки и для расширения кругозора, а теперь продолжаем с нашими открытыми портами.

Неподдерживаемые системой семейства адресов

Опция netstat –verbose
покажет подробный вывод, а в самом конце отобразит неподдерживаемые Address Family.

 netstat: no support for `AF IPX' on this system. netstat: no support for `AF AX25' on this system. netstat: no support for `AF X25' on this system. netstat: no support for `AF NETROM' on this system. 

Соответствие портов и процессов

Узнать, какой порт занимает определённая программа:

 # netstat -ap | grep ssh
(Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.)
tcp 0 0 *:ssh *:* LISTEN -
tcp6 0 0 [::]:ssh [::]:* LISTEN - 

Выяснить, каким процессом используется определённый порт:

 # netstat -an | grep ':80' 

Using built-in netstat command-line utility

Step 1:
Open the command prompt. 

 netstat -an 

Как проверить открытый TCP

Что означает 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) — при этом данные в выводимой информации отсутствуют!

В качестве внешнего адреса, когда доступно подключения с любого IP и с любого порта, для TCP протокола пишется 0.0.0.0:0
, а для UDP протокола в этих же условиях пишется *:*
. Что тоже не особо логично и сбивает с толку. Точнее говоря такое различие в обозначениях вытекает из разницы протоколов TCP и UDP.

Нужно помнить, что некоторые из этих обозначений пересекаются с нотациями из Linux, где они имеют своё собственное значение.

Чтобы чуть облегчить жизнь, я составил такую табличку, которую можно использовать в качестве шпаргалки:

Как с помощью PowerShell проверить открытые порты в Windows

Get-NetTCPConnection
— это PowerShell-эквивалент NETSTAT
, запуск команды без опций возвращает результат аналогичный netstat (но только по TCP портам и соединениям!).

 Get-NetTcpConnection 

Как проверить открытый TCP

Чтобы вывести список открытых портов, используйте опцию -State
со значением Listen
:

 Get-NetTcpConnection -State Listen 

Как проверить открытый TCP

Командлет Get-NetUDPEndpoint
получает текущую статистику для конечной точки UDP. Командлет возвращает свойства конечной точки UDP, например локальные и удалённые порты UDP. Если вы не укажете никаких параметров, командлет получит статистику для всех конечных точек UDP.  Get-NetUDPEndpoint
запущенный без опций вернёт локальный адрес и локальный порт.

 Get-NetUDPEndpoint 

Как проверить открытый TCP

А следующая команда покажет открытые на всех сетевых интерфейсах UDP порты:

 Get-NetUDPEndpoint | Where-Object {($_. LocalAddress -eq "0.0.0.0") -or ($_. LocalAddress -eq "::")} 

Как проверить открытый TCP

UDP и LISTENING

Про UDP уже сказано чуть выше, что этот протокол не создаёт соединений в том смысле, как это делает TCP. Поэтому для этого протокола нет никаких состояний соединения — это просто неприменимо к нему. По этой причине в графе Состояние для него никогда не пишется LISTENING. Но значит ли это, что UDP порт не может быть прослушиваемым? Нет! Порт UDP также может быть прослушиваемым и доступным для соединений. В том числе этот порт может использоваться вирусами и злоумышленниками, поэтому эти порты также подлежат исследованию.

Nmap

Step 1:
Download the latest version of Nmap from the Nmap website. You can find the download link on the Nmap download page: 

 https://nmap.org/download.html 

Step 2:
Extract the downloaded file to a location on your computer. This will create a new folder containing the Nmap files.

 cd C:\nmap 
 nmap.exe -V 

This will display the version number of Nmap, indicating that it has been installed successfully.

 nmap -sT localhost 

Как проверить открытый TCP

This will scan the specified host or IP address and display the results. You can also use the -h option to view a list of available options and arguments for the nmap command. Overall, installing Nmap in the Windows command line is a straightforward process. You can download the latest version of Nmap from the Nmap website, extract the files, and then run the nmap.exe file to install it. Once it is installed, you can use the nmap command to scan hosts and IP addresses and view the results.

Using TcpView

Step 1:
Download the TcpView utility from the Microsoft Sysinternals website. You can find the download link on the TcpView page of the Sysinternals website.

Как проверить открытый TCP

Step 2:
Extract the downloaded file and run the TcpView.exe file to launch the TcpView utility. This will open the TcpView window, which shows a list of all active TCP/IP connections on your machine.

Как проверить открытый TCP

Step 3:
Open the tcpview.exe (application).

Protocol:
Shows the protocol being used for the connection (TCP or UDP)

Local Address:
Shows the local address and port being used for the connection

Remote Address:
Shows the remote address and port being connected to

State:
Shows the current state of the connection (e.g. Established, Listen, etc.)

You can use the “Local Address” and “Remote Address” columns to see which ports are being used by which applications. For example, if you see a connection with a local address of “127.0.0.1:80”, this means that the local application is using port 80 for outgoing connections.

Службы *. socket

В Linux вместо запуска службы на определённом порту можно настроить сокет для прослушивания порта. Схема работы следующая: сетевая служба (например, это можно настроить для SSH) по умолчанию не запущена и, следовательно, не потребляет системные ресурсы. Тем не менее её порт прослушивается системным процессом, который и без того бы работал. Как только на этот порт (допустим на 22) поступает запрос соединения, системный процесс запускает нужную службу, и она начинает работать как будто бы всегда была включена. После прекращения связи, служба вновь отключается, и порт вновь начинает прослушивать системный процесс.

В этом случае в качестве программы, открывшей порт, не указывается служба, которая фактически будет работать с поступившим соединением.

:/>  При установке виндовс 7 компьютер зависает

Например, для SSH netstat
будет показывать примерно следующие данные (1/init вместо sshd):

 Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp6 0 0 :::22 :::* LISTEN 1/init 

А ss
будет показывать примерно так:

 Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 *:22 *:* users:(("systemd",pid=1,fd=44)) 

Звёздочка (*) вместо адреса или порта

Мы можем увидеть записи вроде *:80
или даже *:*

Кстати, служба может прослушивать порт в соответствии со следующими правилами:

  • может прослушиваться конкретный порт для одного IP адреса
  • может прослушиваться конкретный порт для любого IP адреса

Кстати, просто для справки: если ваш компьютер подключается к веб сайту, то веб сайты обычно работают на 80 и 443 портах. Следовательно, веб браузер подключается именно к 80 порту (или 443, если это безопасное HTTPS соединение). Но на вашем компьютере открывается новое соединение на каком угодно, но только не на 80 и 443 портах — обычно используются порты с номерами >30000, например, на вашем компьютере может быть открыто исходящее соединение с портом 42063 и оно будет адресовано к 80 порту какого-либо веб сервера.

Просмотр статистики для каждого протокола

Показать статистику всех портов: netstat -s

 # netstat -s
Ip: 11150 total packets received 1 with invalid addresses 0 forwarded 0 incoming packets discarded 11149 incoming packets delivered 11635 requests sent out
Icmp: 13791 ICMP messages received 12 input ICMP message failed.
Tcp: 15020 active connections openings 97955 passive connection openings 135 failed connection attempts
Udp: 2841 packets received 180 packets to unknown port received.
. 

Показать статистику только TCP портов: netstat -st

 # netstat -st 

Показать статистику только UDP портов: netstat -su

 # netstat -su 

Маршрутизация ядра

Показать таблицу маршрутизации ядра: netstat -r

 # netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default 192.168.128.2 0.0.0.0 UG 0 0 0 eth0
192.168.128.0 * 255.255.255.0 U 0 0 0 eth0 

Примечание: Используйте netstat -rn
для просмотра маршрута в цифровом формате без разрешения имён узлов.

TCP и UDP

TCP и UDP это протоколы транспортного уровня. Самое главное что вам нужно о них знать: любой из них может использоваться для передачи информации.

Кстати, про протокол TCP вы практически наверняка слышали, по крайней мере должны были встречать запись TCP/IP — эта связка протоколов очень важна для Интернета. Протокол IP отвечает за то, куда отправлять данные, а TCP отвечает за непосредственную передачу данных и проверку их целостности.

Работу протокола TCP можно представить как создание соединения между двумя компьютерами, по этому соединению передаются данные. Внутри этого соединения данные проверяются на предмет повреждения — если какая-то часть повреждена, то она отправляется повторно.

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

На какие открытые порты нужно обращать внимание

Я упоминал, что если на компьютер попала вредоносная программа, которая открыла соединение для связи со злоумышленником, то она будет прослушивать один из портов. В этом случае для TCP состояние подключения будет LISTENING или ESTABLISHED. Протокол UDP является «безстатусным», поэтому для него ничего не пишется, но нужно знать, что через UDP точно также может происходить обмен информацией.

Нужно помнить, что легитимные службы, которые открыты для доступа из вне, могут быть подвергнуты атакам, например, брут-форс пароля или эксплуатация уязвимостей. Что касается вредоносных программ, то они могут использовать любые порты. Поэтому нет готового списка портов, на которые нужно обращать внимание. Любой порт может быть признаком проблемы с безопасностью компьютера.

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

Трояны и бэкдоры могут действовать двумя методами:

  • открывать порт и ждать подключения злоумышленника;
  • самостоятельно подключаться к удалённой системе злоумышленника.

При втором варианте состояние подключения НЕ будет LISTENING — вредоносную программу можно найти только путём полного анализа всех соединений.

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

Список сокетов, находящихся в состоянии LISTEN

Перечислить все прослушиваемые порты: netstat -l

 # netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:domain *:* LISTEN
tcp6 0 0 [::]:ssh [::]:* LISTEN
udp 0 0 192.168.128.134:ntp *:* 

Перечислить прослушиваемые TCP порты: netstat -lt

 # netstat -lt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:domain *:* LISTEN
tcp 0 0 localhost:ipp *:* LISTEN
tcp6 0 0 [::]:ssh [::]:* LISTEN 

Перечислить прослушиваемые UDP порты: netstat -lu

 # netstat -lu
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 *:bootpc *:*
udp6 0 0 [::]:ntp [::]:* 

Перечислить прослушиваемые UNIX сокеты: netstat -lx

 # netstat -lx
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 3141 /var/run/fail2ban/fail2ban.sock
unix 2 [ ACC ] STREAM LISTENING 20492 /var/run/mysqld/mysqld.sock
unix 2 [ ACC ] STREAM LISTENING 23323 /var/run/php5-fpm.sock 

Список всех портов (как прослушиваемых, так и нет)

Перечислить все порты: netstat -a

 # netstat -a | more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:domain *:* LISTEN
udp6 0 0 fe80::20c:29ff:fe68:ntp [::]:*
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 20492 /var/run/mysqld/mysqld.sock
unix 2 [ ACC ] STREAM LISTENING 23323 /var/run/php5-fpm.sock 

Перечислить все TCP порты: netstat -at

 # netstat -at
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:domain *:* LISTEN
tcp 0 0 *:ssh *:* LISTEN
tcp 0 0 localhost:ipp *:* LISTEN
tcp 0 0 *:http *:* LISTEN 

Перечислить все UDP порты: netstat -au

 # netstat -au
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 localhost:domain *:*
udp 0 0 *:bootpc *:*
udp6 0 0 fe80::20c:29ff:fe68:ntp [::]:* 

LISTENING, ESTABLISHED, CLOSE_WAIT и другие состояния

Как вы можете увидеть в выводе команды netstat для протокола TCP доступны разные варианты состояний.

Самые популярные из них это LISTENING
— означает, что порт прослушивает запущенное на данном компьютере приложение, что оно готово принять соединение, например, от другого компьютера или от другой службы, запущенной на этом же компьютере. Также применяются термины «открытый порт», «привязка порта».

ESTABLISHED
означает уже установленное соединение. Пример такого соединения: веб-браузер инициализировал загрузку страницы сайта и пока данные передаются по этому соединению, у этого соединения статус ESTABLISHED.

Имеются и другие виды состояний, но для наших целей они не очень важны. По большому счёту нас интересует только LISTENING, так как это означает открытые порты на нашем компьютере и возможность подключаться к нему. Также нам важно состояние ESTABLISHED, поскольку оно означает, что данные уже передаются по сетевому соединению.

Отображение PID и имени процесса в выводе netstat

Опция netstat -p
добавит «PID/Program Name» в вывод netstat, и может быть совмещена с любым другим набором опций. Это очень полезно при отладке, для определения того, какая программа работает на определённом порту.

 # netstat -pt
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 org-ru-putty.vm.udf:www 52-106.plus.kerch:55723 ESTABLISHED 9486/nginx: worker
tcp 0 0 org-ru-putty.vm.udf:www 52-106.plus.kerch:55757 ESTABLISHED 9486/nginx: worker 

Вывод информации netstat непрерывно

Опция netstat -c
будет выводить информацию непрерывно, в стиле top
, обновляя экран каждые несколько секунд.

 # netstat -c
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 org-ru-putty.vm.udf:www 182.131.74.202:59933 FIN_WAIT2
tcp 0 0 org-ru-putty.vm.udf:www 182.131.74.202:63761 FIN_WAIT2
tcp 0 0 org-ru-putty.vm.udf:www 92-181-66-102-irk.:4585 ESTABLISHED
^C 

Разрешение имён в выводе netstat

Это также ускорит вывод, так как netstat не станет выполнять ненужный поиск.

 # netstat -an 

Для вывода цифровых значений только некоторых из этих пунктов, используйте следующие команды:

 # netsat -a --numeric-ports
# netsat -a --numeric-hosts
# netsat -a --numeric-users 

Что означает вывод netstat и ss

Далее мы научимся понимать, что именно выводит netstat
. Но для полного понимания нам нужно изучить немного теории — совсем кратко. Я расскажу только о том, что нам действительно понадобиться.