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 без параметров.
Команда по аналогии с 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
Для получения информации об использовании протокола 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 имена, и для каждого соединения указал имя процесса, который его использует.
По имени 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
}
}
Аналогичным образом можно отслеживать и логировать сетевые подключения по любому другому протоколу, например 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.
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
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
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:
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
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
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
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}
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'}
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
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
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.
Источник — 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
Поделитесь своим мнением о программном обеспечении, оставьте отзыв и помогите сделать его еще лучше!