я знаю это netstat -s
существует в Windows, но отображает гораздо меньше информации, чем в Linux / OS X. Он дает только 8 счетчиков TCP, в то время как в Linux их больше 50.
Я ищу любые счетчики, связанные с TCP, такие как:
Linux: TCPDSACKOldSent
, DelayedACKLocked
, TCPOFODrop
или TCPDSACKIgnoredNoUndo
. Вы можете получить весь набор счетчиков через cat /proc/net/netstat
.
BSD / OS X: rcvbyteafterwin
, rcvduppack
или rcvoobyte
.
Есть ли встроенный инструмент для этого? Или, может быть, есть системный вызов, который позволил бы мне получить такую информацию?
Нет для встроенного инструмента. Единственный способ, который я могу придумать, - это использовать библиотеку winpcap / npf для создания собственного инструмента для создания необходимой статистики.
В Windows сетевой стек лишен по сравнению со стороной Linux / BSD. Таким образом, потребность в драйвере winpcap & npf.
Я бы добавил, что даже брандмауэр Windows является брандмауэром с псевдо-сохранением состояния (уровень 4, и он просто проверяет трафик TCP, без проверки icmp и т. Д. (Уровень 3)), а не полный брандмауэр уровня 3 с отслеживанием состояния, такой как Linux или BSD возможно. Это объясняет, почему встроенный инструмент отображает намного меньше данных.
Windows не сообщает о свойствах TcpExt. Причина в том, что Windows по умолчанию не поддерживает TOE. Вы можете проверить это, запустив netstat -nt
и столбец разгрузки, вероятно, будет InHost
. Напротив, Linux по умолчанию использует TOE (TCP Offload Engine), а инструменты созданы для запроса свойств TcpExt.
Требуемые данные полностью зависят от драйвера, созданного для ОС, который предоставляет эти данные. Также должен быть создан поставщик Windows, чтобы вы могли запрашивать данные (это может быть сборка драйвера). В Windows откройте Диспетчер устройств и проверьте расширенную вкладку свойств сетевого адаптера. Вы можете увидеть там, какие типы данных поддерживаются для сбора в Windows и включена ли она.
Я понимаю, что другие посоветовали Windows не делать этого по умолчанию и рекомендовали другие инструменты (например, pcap). Хотя я думал, ты хочешь знать Зачем.
netsh interfaces ipv4 show {tcp,ip,udp}stats
дает вам некоторую дополнительную информацию по netstat, но этого может быть недостаточно.
Если не использовать сторонний продукт ...
netstat -s -e
или вы можете использовать WMI
Такие как:
wmic path Win32_PerfFormattedData_Tcpip_NetworkInterface
wmic path Win32_PerfFormattedData_Tcpip_TCPv4
wmic path Win32_PerfFormattedData_Tcpip_IPv4
указанное выше нужно будет использовать с GET
на нужные вам объекты, но вы можете запустить их как есть, чтобы увидеть, какие есть варианты.
Для всех, кто наткнулся на это, как я, вот еще пара вариантов
# List all TCP Connections
netstat -tanob
# List all Connections
netstat -anob
# List all TCP Connections with FQDN
netstat -tafob
# List all Connections with FQDN
netstat -afob
Но я предпочитаю получать очень полезную информацию с помощью PowerShell.
Get-NetTCPConnection |
Where-Object {$_.State -eq "Listen"} |
Sort-Object LocalPort |
Format-Table -AutoSize `
LocalAddress,
LocalPort,
RemoteAddress,
RemotePort,
State,
@{l="Process/Application";e={$(Get-Process -PID $_.OwningProcess | Select-Object ID,ProcessName).ProcessName}}
Есть хорошая статья о способе PowerShell на https://sysnetdevops.com/2017/04/24/exploring-the-powershell-alternative-to-netstat/