Аналог команды netstat windows

19/07/2020


У каждого администратора, IT инженера или программиста наверняка есть несколько десятков базовых утилит или команд, которые постоянно применяются в работе. У меня также есть такой набор базовых инструментов, который является неотъемлемой частью моей профессии. Среди них можно назвать wget, curl, ping, vim, tree, git, ip ну и конечно же netstat. Последняя являлась незаменимой утилитой при работе на абсолютно разных платформах, начиная от всевозможных версий Linux, Unix, BSD и заканчивая MacOS, а так же Microsoft Windows. С помощью нее можно получать информацию о сетевых соединениях, интерфейсах, таблицах маршрутизации. Утилитка позволяет получать обширнейшую информацию, которая бывает полезна во время траублшутинга, дебагинга или настройки чего-то нового.

В последние несколько лет отчетливо прослеживается тенденция на замену утилиты netstat на более новые ее аналоги — ss и lsof. Так уже в Centos по умолчанию Вы не найдете netstat, Вам предлагается использовать уже именно ss, а также lsof. Можно конечно же устанавливать netstat из пакетов и не париться о новых его аналогах. Мне однако такой путь кажется не правильным. Время идет, технологии развиваются, и надо обязательно изучать новинки, даже если они на первый взгляд кажутся бесполезными. При написании этой статьи не ставил цели сделать какое-то наглядное пособие по использованию новых аналогов netstat. Хотел скорее показать, как безболезненно перейти на новые утилиты, расширив свой профессиональный кругозор и функциональные возможности.

Практические примеры

Сразу оговорюсь, что ss и lsof не являются полными аналогами утилиты netstat. В какой-то мере они уступают своему предшественнику по широте охвата. Так утилита ss нацелена строго на отображение разнообразной статистики по сетевым соединениям на хосте. Команда же lsof предназначена для отображения статистики по открытым файлам теми или иными процессами. Кроме того, как частный вариант использования она позволяет отображать информацию по сетевым подключениям.

Пример 1

Итак, давайте рассмотрим часто встречающиеся случаи использования команды netstat, а также варианты получения этой информации с помощью ss и lsof. Например, чтобы узнать какие TCP порты у нас прослушиваются в системе (здесь и далее мы используем примеры в ОС Ubuntu Linux) с помощью netstat, мы выполняем следующую команду.

root@www:~# netstat -nat | grep LISTEN
tcp        0      0 192.168.0.1:444         0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN
tcp        0      0 192.168.0.1:857         0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN 

Если же в Вашей системе netstat не имеется, то эту полезную информацию можно получить следующими путями.

root@www:~# ss -nat state listening
Recv-Q          Send-Q            Local Address:Port             Peer Address:Port
0               1                  192.168.0.1:444                    0.0.0.0:*
0               80                    127.0.0.1:3306                  0.0.0.0:*
0               128                     0.0.0.0:80                    0.0.0.0:*
0               128               127.0.0.53%lo:53                    0.0.0.0:*
0               128                192.168.0.1:857                    0.0.0.0:*
0               20                    127.0.0.1:25                    0.0.0.0:*
0               128                     0.0.0.0:443                   0.0.0.0:*

root@www:~# lsof -i -sTCP:LISTEN -P -n
COMMAND     PID            USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
systemd-r   369 systemd-resolve   13u  IPv4   12867      0t0  TCP 127.0.0.53:53 (LISTEN)
sshd        475            root    3u  IPv4 1445266      0t0  TCP 192.168.0.1:857 (LISTEN)
mysqld      485           mysql   24u  IPv4   15708      0t0  TCP 127.0.0.1:3306 (LISTEN)
openvpn     571          nobody    8u  IPv4   15311      0t0  TCP 192.168.0.1:444 (LISTEN)
exim4       859     Debian-exim    3u  IPv4   16476      0t0  TCP 127.0.0.1:25 (LISTEN)
nginx      4962        www-data    8u  IPv4  851347      0t0  TCP *:443 (LISTEN)
nginx      4962        www-data    9u  IPv4  851348      0t0  TCP *:80 (LISTEN)
nginx      4963        www-data    8u  IPv4  851347      0t0  TCP *:443 (LISTEN)
nginx      4963        www-data    9u  IPv4  851348      0t0  TCP *:80 (LISTEN)
nginx     25097            root    8u  IPv4  851347      0t0  TCP *:443 (LISTEN)
nginx     25097            root    9u  IPv4  851348      0t0  TCP *:80 (LISTEN)

Как видим, утилита ss очень похожа на netstat, кроме того она позволяет без использования grep и прочих сторонних фильтров отображать соединения, которые находятся в состоянии LISTEN. Команда lsof обладает другим синтаксисом, как видно из примера. Кроме информации по открытым портам она сразу же в общем скопе предоставляет данные по приложениям, которые используют те или иные порты, а также номера PID процессов этих приложений.

Пример 2

Еще одной часто встречающейся задачей является выяснение программы, которая слушает тот или иной сокет в системе. Netstat это позволяет сделать с помощью следующей комбинации команд в сочетании с утилитой grep.

root@www:~# netstat -natp | grep LISTEN | grep :443
tcp        0      0 0.0.0.0:443    0.0.0.0:*      LISTEN      8673/nginx: worker

Чтобы получить аналогичнюу информацию в системе с помощью ss или lsof нужно выполнить эти команды со следующими параметрами.

root@www:~# ss -natp state listening 'sport = :443'
Recv-Q    Send-Q       Local Address:Port        Peer Address:Port
0         128                0.0.0.0:443              0.0.0.0:*     users:(("nginx",pid=25097,fd=8),("nginx",pid=8674,fd=8),("nginx",pid=8673,fd=8)) 

root@www:~# lsof -i :443 -sTCP:LISTEN -P -n
COMMAND   PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx    8673 www-data    8u  IPv4 851347      0t0  TCP *:443 (LISTEN)
nginx    8674 www-data    8u  IPv4 851347      0t0  TCP *:443 (LISTEN)
nginx   25097     root    8u  IPv4 851347      0t0  TCP *:443 (LISTEN)

Как видно из этого примера, обе последние команды позволяют выводить и сортировать более избирательно нужную информацию. При этом, если netstat позволяет получить PID только родительского процесса, то ss и lsof дают более подробную информацию о том, кто и под каким пользователем использует данный сокет.

Из пары приведенных примеров хорошо прослеживается прогресс в возможностях более новых утилит по сравнению с netstat. Я думаю, что каждый инженер или администратор выполняет подобные команды десятки раз в течении рабочей недели. Поэтому как минимум знать о существовании и возможностях ss и lsof на сегодняшний день нужно каждому ITшнику.

Заключение

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

А какие утилиты коммандной строки в Linux/Nix являются фаворитами у Вас? Что приходится часто использовать в работе? Пишите в комментариях и делитесь Вашими соображениями! Буду очень признателен за это.

Многие администраторы для отображения информации о сетевых подключениях TCP/IP, открытых TCP портах в Windows привыкли использовать консольную утилиту netstat или графическую TCPView. В PowerShell для замены утилиты netstat можно использовать командлет Get-NetTCPConnection, который можно довольно гибко использовать для получения информации об активных сетевых соединениях в Windows, открытых сетевых портах и запушенных процессах, которые используют TCP протокол. Благодаря тому, что PowerShell это объектно-ориентированный язык, вы можете довольно удобно делать сложные скрипты для получения информации и мониторинга открытых портов, процессах и установленных сетевым соединениях.

Попробуйте запустить командлет Get-NetTCPConnection без параметров.

Get-NetTCPConnection - powershell командлет для получения списка сетевых подключений

Команда по аналогии с netstat вывела список всех активных подключений с указанием локального и удаленного адреса, порта, состояния подключения (Listen, Established Internet, TimeWait, Bound, CloseWait, SynReceived, SynSent, TimeWait) и идентификатор процесса (PID), которые использует это TCP подключение.

Можно вывести список локальных портов, которые слушаются (открыты) на вашем компьютере:

Get-NetTCPConnection -State Listen | Select-Object -Property LocalAddress, LocalPort, RemoteAddress, RemotePort, State | Sort-Object LocalPort |ft

вывести список открытый портов в windows

Для получения информации об использовании протокола UDP, открытых портов используется командлет
Get-NetUDPEndpoint
.

Можно вывести только внешние (Интернет) подключения:

Get-NetTCPConnection -AppliedSetting Internet

Для всех сетевых TCP подключений можно вывести DNS имена удаленных хостов и имена процессов.

Get-NetTCPConnection -State Established |Select-Object -Property LocalAddress, LocalPort,@{name='RemoteHostName';expression={(Resolve-DnsName $_.RemoteAddress).NameHost}},RemoteAddress, RemotePort, State,@{name='ProcessName';expression={(Get-Process -Id $_.OwningProcess). Path}},OffloadState,CreationTime |ft

Данный PowerShell скрипт выполнил разрешение всех IP адресов хостов в DNS имена, и для каждого соединения указал имя процесса, который его использует.

список активных сетевых подключений и процессов в Windows 10 с помощью powershell

По имени PID родительского процесса можно вывести список связанных имен служб Windows, которые используют сеть:

Get-WmiObject Win32_Service | Where-Object -Property ProcessId -In (Get-NetTCPConnection).OwningProcess | Where-Object -Property State -eq Running | Format-Table ProcessId, Name, Caption, StartMode, State, Status, PathName

Можно вывести только сетевые подключения, которые инициированы определенным процессом. Для этого можно использовать такой PowerShell скрипт:

$TrackProcessName = “*firefox*”
$EstablishedConnections = Get-NetTCPConnection -State Established |Select-Object -Property LocalAddress, LocalPort,@{name='RemoteHostName';expression={(Resolve-DnsName $_.RemoteAddress).NameHost}},RemoteAddress, RemotePort, State,@{name='ProcessName';expression={(Get-Process -Id $_.OwningProcess). Path}}, OffloadState,CreationTime
Foreach ($Connection in $EstablishedConnections)
{
If ($Connection.ProcessName -like $TrackProcessName)
{
$Connection|ft
}
}

Ареал применения командлета Get-NetTCPConnection очень широкий. Например, вы можете создать простой PowerSHell скрипт, который должен отслеживать установку соединения с определенного IP адреса на указанный локальный порт и выводить всплывающее уведомление администратору.

В следующем примере PowerShell скрипт проверяет, когда появится соединение с указанного IP адреса по порту RDP порту 3389. Если такое подключение появится в списке, он выведет всплывающее уведомление и логирует дату и время подключения в текстовый файл:

$TrackingIP = “192.168.10.50”
$TrackingPort =”3389”
$log = "C:\ps\rdp_connection_log.txt"
$EstablishedConnections = Get-NetTCPConnection -State Established
Foreach ($Connection in $EstablishedConnections)
{

If (($Connection.RemoteAddress -eq $TrackingIP) -and ($Connection.LocalPort -eq $TrackingPort))
{
Add-Type -AssemblyName System.Windows.Forms
$global:balmsg = New-Object System.Windows.Forms.NotifyIcon
$path = (Get-Process -id $pid).Path
$balmsg.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon($path)
$balmsg.BalloonTipIcon = [System.Windows.Forms.ToolTipIcon]::Warning
$balmsg.BalloonTipText = "К вашему компьютеру подключились по RDP c $($Connection.RemoteAddress)"
$balmsg.BalloonTipTitle = "Новое RDP подключение с $($Connection.RemoteAddress)"
$balmsg.Visible = $true
$balmsg.ShowBalloonTip(10000)
(Get-Date).ToString() + ' ' + $Connection.RemoteAddress + ' установлено RDP подключение ' >> $log
}
}

powershell скрипт для оповещения об удаленном подключении к компьютеру windows

Аналогичным образом можно отслеживать и логировать сетевые подключения по любому другому протоколу, например SSH, SMB, FTP, SMTP и т.д. Такой PowerShell скрипт можно оформить в виде службы Windows, которая будет запускаться автоматически.

С помощью PowerShell remoting командлетов (Enter-PSSession и Invoke-Command) вы можете получить список открытых TCP портов и подключений на удаленных компьютерах.

Invoke-Command -ComputerName host1 {Get-NetTCPConnection -State Established}

Командлет Get-NetTCPConnection (также как и Test-NetConnection) может быть крайне полезен для мониторинга и диагностики сетевых подключений в Windows.

Table of Contents

The netstat (network statistics) is a really useful command-line tool for system admins when it comes to diagnosing network issues in a system. It shows the protocol-specific networking statistics for each network connection on your computer. People who have been using it for quite some time would surely understand its importance; no matter whether you work in Windows or Linux environment.

In this article, we will discuss the alternative of Netstat in Windows PowerShell. The NetTCPIP module of PowerShell includes Get-NetTCPConnection cmdlet that we can use to get the network statistics like netstat.

Finding the Get-NetTCPConnection Cmdlet

Finding the Get-NetTCPConnection Cmdlet

Now lets take a look how to use this command.

Get-NetTCPConnection

If you run Get-NetTCPConnection cmdlet without any parameter, it gives you the following information by default:

  • LocalAddress
  • LocalPort:
  • RemoteAddress
  • RemotePort
  • State
  • AppliedSettings
  • OweningProcess
Default output of Get-NetTCPConnection cmdlet

Default output of Get-NetTCPConnection cmdlet

The output of this cmdlet is not exactly the same as that of netstat command but since PowerShell returns objects, we get a lot more control on its output. The above mentioned table headers are not just a text strings; these are the properties that you can use to filter and modify the output of cmdlet.

Filtering the results

By default, the Get-TCPConnection cmdlet returns the stats for all the connections and IP addresses. If you have multiple network interfaces and multiple IP addresses configured in a computer, it will give you too much information which could be overwhelming. To view the stats for a particular network connection in your computer, you could specify the IP address using -LocalAddress parameter as shown below:

Get-NetTCPConnection -LocalAddress 192.168.0.254
View the network stats for particular local address

View the network stats for particular local address

You can filter the results using the properties returned by Get-NetTCPConnection cmdlet. For instance, if you want to only view the connections that are in “Listen” state, you could modify the command as shown below:

Get-NetTCPConnection -State Listen

This command will filter the output and only show the connections that are in Listen state. Have a look at the following image:

View connections with Listen state

View connections with Listen state

You could use this idea to list the TCP ports on your local or remote computers. To do that, you can use the following command:

Get-NetTCPConnection -State Listen | Select Local*, State | sort LocalPort
View the list of Listening connections sorted by local TCP port

View the list of Listening connections sorted by local TCP port

This command shows all the TCP ports listening on your computer sorted based on local TCP port number. If you’re interested in getting the count of connections that are in ‘Listen’ state, you can use the Measure-Object cmdlet (or measure alias) as shown below:

Get-NetTCPConnection -State Listen | Measure-Object
Get the count of Listening connections using measure

Get the count of Listening connections using measure

Similarly, you could combine multiple properties to further narrow down the output and find out the connections that you are interested in particular.

The Out-GridView cmdlet

Instead of using parameters to filter the output of Get-NetTCPConnection cmdlet, you could combine it with Out-GridView cmdlet as shown in the following command:

Get-NetTCPConnection | Out-GridView
Use Get-NetTCPConnection with Out-GridView to filter output

Use Get-NetTCPConnection with Out-GridView to filter output

Here, we are getting all the connections with Get-NetTCPConnection cmdlet and passing them to Out-GridView to build a dynamic table. The best thing about this table is that you can add or remove filter criteria by clicking on Add Criteria button and the output will be dynamically filtered in real time as shown in the screenshot.

Check TCP ports on remote server

Suppose you’ve a remote web server and you want to find out it is listening on port 80, you won’t even have to login on webserver and launch a command prompt to interactively run netstat or Get-NetTCPConnection command. You could use the PowerShell remoting to run the command from your local computer itself.

Invoke-Command -ComputerName webserver -ScriptBlock {Get-NetTCPConnection -LocalPort 80 | Format-Table -Auto}
Get the network stats for a remote server

Get the network stats for a remote server

Taking it a little bit further, to check if someone is connected to webserver via remote desktop protocol (RDP), you can run the following command:

Invoke-Command -ComputerName webserver -ScriptBlock {Get-NetTCPConnection -LocalPort 3389 -State 'Established'}
View who is accessing a server using remote desktop

View who is accessing a server using remote desktop

This command shows that someone with IP address 192.168.0.254 is accessing the webserever via RDP.

Determine the name of owning process

Did you notice the OwningProcess column in the output? This property shows the process identifier (PID) of the process responsible for that particular connection. Now you might be thinking it will be a great idea if you could see the process name and executable path in two separate columns. Well, it is possible indeed with PowerShell. See the following command for reference:

Get-NetTCPConnection | select Local*, Remote*, State,`
@{n="ProcessName";e={(Get-Process -Id $_.OwningProcess).ProcessName}},`
@{n="ProcessPath";e={(Get-Process -Id $_.OwningProcess).Path}} | ft -Auto
View network stats including process name and executable path

View network stats including process name and executable path

Take a look at the ProcessName and ProcessPath columns that you just created. The new columns are showing the process name and executable path which is way more useful for admins than just the PID. The above command shows that you don’t have to stick with the default properties of Get-NetTCPConnection cmdlet. PowerShell allows you to build the custom properties (known as calculated properties) on the fly by using other cmdlets.

By the way, you could see the list of all the default properties and methods supported by Get-NetTCPConnection cmdlet using the following command:

Get-NetTCPConnection | Get-Member
Show properties and methods supported by Get-NetTCPConnection

Show properties and methods supported by Get-NetTCPConnection

This command shows that there are numerous properties and methods you could use to filter and format the output of cmdlet.

This is just the beginning. Once you start using Get-NetTCPConnection cmdlet, you will discover whole lot of new things that you couldn’t even do with netstat tool. The best thing is that you could even use the netstat (and other cmdline tools) directly in PowerShell so whenever you feel there is something you cannot find in Get-NetTCPConnection cmdlet, feel free to use your old buddy netstat in PowerShell command or script.

Материал из Wiki — Iphoster — the best ever hosting and support. 2005 — 2025

Перейти к:навигация, поиск

Windows — аналог netstat — TCPView

Аналог Linux netstat — TCPView для просмотра портов и подключений в системе в реальном режиме времени:

https://learn.microsoft.com/en-us/sysinternals/downloads/tcpview

TCPVCon — это TCPView для командной строки Windows.

Tcpview-screen-windows-1.png

Источник — https://wiki.iphoster.net/index.php?title=Windows_-_аналог_netstat_-_TCPView&oldid=13092

Главная


netstat

Мы составили список из 2 бесплатных и платных аналогов netstat. Основные конкуренты: Wireshark, Why Can’t I Connect?. Также вы можете рассмотреть другие аналогичные варианты здесь: About.

Мы составили список из 2 бесплатных и платных аналогов netstat. Основные конкуренты: Wireshark, Why Can’t I Connect?. Также вы можете рассмотреть другие аналогичные варианты здесь: About.




Web-Based



Windows



Mac



Linux



Бесплатно



Открытый исходный код

746

Wireshark — это крупнейший в мире анализатор сетевых протоколов.

13

«Почему я не могу подключиться?» облегчает устранение ошибок соединения TCP / IP.

netstat

-7

Отображает активные соединения TCP, порты, на которых компьютер прослушивает, статистика Ethernet, …

Отображает активные соединения TCP, порты, на которых компьютер прослушивает, статистика Ethernet, …

netstat Платформы

netstat Обзор

Отображает активные соединения TCP, порты, на которых компьютер прослушивает, статистику Ethernet, таблицу IP-маршрутизации, статистику IPv4 (для протоколов IP, ICMP, TCP и UDP) и статистику IPv6 (для IPv6, ICMPv6, TCP через IPv6). и UDP по протоколам IPv6). При использовании без параметров netstat отображает активные TCP-соединения.

Лучшие аналоги netstat

Поделитесь своим мнением о программном обеспечении, оставьте отзыв и помогите сделать его еще лучше!

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Где найти службу windows audio
  • Представить слово кодировка в пяти различных кодировках windows ms dos кои 8 mac iso
  • Приложение для zip файлов для windows
  • Нет звука на компьютере windows 10 наушники или динамики не подключены
  • Как пользоваться python на windows