Linux netstat显示发送和接收队列大小。
如何在Windows(尤其是Server 2003)下获取此信息?
Linux netstat显示发送和接收队列大小。
如何在Windows(尤其是Server 2003)下获取此信息?
Answers:
(这有点脑筋急转弯)
通过查看netstat源的几个版本,似乎正在直接从内核(/ proc / net / ...)查询您要查找的信息,而不是通过具有Windows等效项的套接字相关调用来查询。如果您真的确定要拥有此功能,那么我将看看如何在netstat中检索它,并查看可以找到的功能是否等效。
您可能应该查看ndis.com(网络驱动程序接口规范)和PCAUSA.com以获取驱动程序级别的信息,因为这可能是您在Windows上检索此信息的最佳位置。
我不相信getsockopt()或大多数Winsock领域都可以将您带到有用的地方,但是如果您想朝这个方向发展,请查看MSDN Winsock信息,并查看Winsock程序员的FAQ。
对于入站,您可以使用FIONREAD从ioctlsocket()函数中获取有用的信息,以获取套接字的可读数据量。您可能无法跨进程获取此信息,并且根据数据类型的不同,它可能仅返回第一个数据块的信息,而不是整个队列的信息(如果有多个队列)。
在这种情况下,您可能需要对“积压”进行一些挖掘,但是我看到的大部分内容似乎与设置用于处理SYN泛洪的最大大小有关,而不是与查看实际积压有多大有关。
如果您确实有决心,则可以与您自己的分层服务提供商一起执行某些操作,但这是一条充满危险的奇怪而丑陋的道路,我建议您远离它。
更新:经过一番探索之后,我绝对认为您应该考虑查询NDIS OID。MSDN和TechNet之间的练习是查找与您最相关的信息。
这个问题很旧,但是我想补充一些信息。在Google上的搜索结果相当高。
据我所知,这是没有办法的,但是如果有人可以做更多的挖掘工作,并找出有效的替代方法,将不胜感激!
正如@Fencepost在他的答案中指出的那样,您可以尝试查询NDIS OID。我发现最相关的NDIS OID是OID_GEN_TRANSMIT_QUEUE_LENGTH
大多数NDIS OID都映射到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排队的数据包,并且不区分每个套接字排队的内容。
您想要的可能是WinSock API函数调用的结果getsockopt
:
SO_RCVBUF
保留用于接收的每个套接字的总缓冲区空间。这与SO_MAX_MSG_SIZE
TCP接收窗口的大小无关,也不一定与之对应。
SO_SNDBUF
保留用于发送的每个套接字的总缓冲区空间。这与SO_MAX_MSG_SIZE
TCP发送窗口的大小无关,也不一定与之对应。
问题是可以要求您知道其句柄的套接字。从外部查询似乎很困难,请查看sysinternals TcpView工具。马克·鲁西诺维奇(Mark Russinovich)确实是个裂缝,即使他没有在工具中提供信息。我很确定,如果他有一个轻松获得价值的方法,他会增加一列。
我猜有些内核驱动程序可以帮助深入系统,但找不到任何可用的工具。可以在每个套接字的基础上设置大小,以便全局值没有意义...
在这里看看:http : //support.microsoft.com/kb/224829。