Linux netstat показывает размеры очереди отправки и получения.
Как я могу получить эту информацию под Windows, в частности, Server 2003?
Linux netstat показывает размеры очереди отправки и получения.
Как я могу получить эту информацию под Windows, в частности, Server 2003?
Ответы:
(это что-то вроде мозгового сброса)
При просмотре нескольких версий исходного кода netstat кажется, что запрашиваемая информация запрашивается непосредственно из ядра (/ proc / net / ...), а не через вызовы, связанные с сокетами, которые имеют эквиваленты Windows. Если вы действительно намерены иметь это, я посмотрю, как его извлекают в netstat, и посмотрю, что вы можете найти, что обеспечивает нечто эквивалентное.
Вам, вероятно, следует обратиться к ndis.com (Спецификация интерфейса сетевого драйвера) и PCAUSA.com для получения информации на уровне драйвера, потому что это, вероятно, будет вашим лучшим местом для получения этой информации в Windows.
Я не верю, что getsockopt () или большая часть арены Winsock помогут вам найти что-то полезное, но если вы хотите пойти в этом направлении, посмотрите информацию о Winsock в MSDN, а также ознакомьтесь с часто задаваемыми вопросами для программиста Winsock .
Для входящих вы можете получить что-то полезное из функции ioctlsocket () с помощью FIONREAD, чтобы получить количество читаемых данных для сокета; Возможно, вы не сможете передать это по процессам, и в зависимости от типа данных он может возвращать информацию только для первого блока данных, а не для всей очереди, если в очереди более одного элемента.
В этом контексте вы могли бы покопаться в «backlog», но большая часть того, что я видел, казалось, имела отношение к установке максимального размера для работы с потоками SYN, а не к тому, чтобы увидеть, насколько велико реальное отставание.
Если вы действительно полны решимости, возможно, вы сможете что-то сделать с вашим собственным многоуровневым поставщиком услуг , но это странная и безобразная дорога, полная опасностей, и я собираюсь предложить держаться подальше от этого.
ОБНОВЛЕНИЕ: Пройдя немного побольше, я определенно думаю, что вам стоит взглянуть на запрос идентификаторов NDIS. Поиск наиболее важной для вас информации оставлен в качестве упражнения между вами, MSDN и TechNet.
Этот вопрос старый, но я хотел бы добавить информацию. Это довольно высокий результат поиска в Google.
Насколько я могу судить, нет способа сделать это, но если кто-то сможет больше копать и найти правильную альтернативу, которая будет высоко ценится!
Как отметил @Fencepost в своем ответе, вы можете попытаться запросить OID NDIS. OID_GEN_TRANSMIT_QUEUE_LENGTH - это самый подходящий OID NDIS, который я нашел
Большинство OID NDIS сопоставлены с классами WMI, вы можете перечислить их в powershell с помощью
Get-WmiObject -Namespace root\wmi -List | Where-Object {$_.name -Match "MSNdis" } | Sort-Object
но, похоже, не существует ни одной для длины очереди передачи.
@Chris J упомянул сетевой интерфейс \ длину очереди вывода. Вы можете получить это значение в командной строке с помощью typeperf .
typeperf "\Network Interface(*)\Output Queue Length" -sc 1
Но значение всегда равно 0: http://support.microsoft.com/kb/822226
Windows только отслеживает эту информацию в программном обеспечении драйвера NIC, и это только пакеты, поставленные в очередь на NIC, и не различает, что находится в очереди на сокет.
Если вы хотите выполнить сетевую отладку в командной строке, любые счетчики, которые вы найдете в perfmon, могут быть запрошены с помощью typeperf или logman .
То, что вы хотите, может быть результатом вызовов функции WinSock API getsockopt
:
SO_RCVBUF
Общее пространство буфера для каждого сокета, зарезервированное для получения. Это не связано SO_MAX_MSG_SIZE
и не обязательно соответствует размеру окна приема TCP.
SO_SNDBUF
Общее буферное пространство для сокета, зарезервированное для отправки. Это не связано SO_MAX_MSG_SIZE
и не обязательно соответствует размеру окна отправки TCP.
Проблема в том, что можно попросить розетки, чью ручку вы знаете. Запросы извне кажутся трудными, взгляните на инструмент Sysinternals TcpView . Марк Руссинович действительно взломщик и даже он не предоставляет информацию в своем инструменте. Я почти уверен, что он добавил бы столбец, если бы имел возможность легко получить значения ...
Я предполагаю, что какой-то драйвер ядра мог бы помочь углубиться в систему, но не нашел никакого доступного инструмента. Размеры могут быть установлены на основе каждого сокета, так что глобальные значения не имеют значения ...
Посмотрите здесь: http://support.microsoft.com/kb/224829 .