Linux netstat zeigt die Größen der Sende- und Empfangswarteschlangen an.
Wie erhalte ich diese Informationen unter Windows, insbesondere unter Server 2003?
linux
windows
networking
tcpip
Izzy
quelle
quelle
Antworten:
(Dies ist ein bisschen wie ein Brain Dump)
Wenn Sie sich einige Versionen der netstat-Quelle ansehen, scheinen die gesuchten Informationen direkt vom Kernel (/ proc / net / ...) abgefragt zu werden, nicht über Socket-bezogene Aufrufe mit Windows-Entsprechungen. Wenn Sie wirklich entschlossen sind, dies zu tun, würde ich mir ansehen, wie es in netstat abgerufen wird, und sehen, was Sie finden können, das etwas Äquivalentes bietet.
Informationen zu Treiberebene finden Sie wahrscheinlich unter ndis.com (Network Driver Interface Specification) und PCAUSA.com , da dies wahrscheinlich der beste Ort ist, um diese Informationen unter Windows abzurufen.
Ich glaube nicht, dass getockopt () oder der größte Teil der Winsock-Arena Sie irgendwohin bringen wird, aber wenn Sie in diese Richtung gehen möchten, lesen Sie die MSDN Winsock-Informationen und lesen Sie auch die FAQ des Winsock-Programmierers .
Für eingehende Daten können Sie möglicherweise mit der Funktion ioctlsocket () mit FIONREAD nützliche Informationen abrufen, um die Menge der lesbaren Daten für einen Socket abzurufen. Möglicherweise können Sie dies nicht prozessübergreifend übertragen. Je nach Datentyp werden möglicherweise nur Informationen für den ersten Datenblock und nicht für die gesamte Warteschlange zurückgegeben, wenn sich mehr als ein Element in der Warteschlange befindet.
In diesem Zusammenhang könnten Sie sich mit "Rückstand" befassen, aber das meiste, was ich sah, schien sich auf die Festlegung der maximalen Größe für den Umgang mit SYN-Überschwemmungen zu beziehen, nicht wirklich darauf, wie groß der tatsächliche Rückstand war.
Wenn Sie wirklich entschlossen sind, können Sie möglicherweise etwas mit Ihrem eigenen Layered Service Provider tun , aber das ist eine seltsame und hässliche Straße voller Gefahren, und ich werde vorschlagen, sich davon fernzuhalten.
UPDATE: Nachdem Sie ein bisschen mehr herumgestöbert haben, sollten Sie sich auf jeden Fall die Abfrage von NDIS-OIDs ansehen. Das Finden der für Sie relevantesten Informationen bleibt eine Übung zwischen Ihnen, MSDN und TechNet.
quelle
Diese Frage ist alt, aber ich wollte einige Informationen hinzufügen. Es ist ein ziemlich hohes Suchergebnis bei Google.
Soweit ich das beurteilen kann, gibt es keinen Weg, dies zu tun, aber wenn jemand mehr graben und eine gültige Alternative finden kann, wäre das sehr dankbar!
Wie @Fencepost in seiner Antwort hervorhob, können Sie versuchen, NDIS-OIDs abzufragen. Die relevanteste NDIS-OID, die ich gefunden habe, ist OID_GEN_TRANSMIT_QUEUE_LENGTH
Die meisten NDIS-OIDs sind WMI-Klassen zugeordnet. Sie können sie in Powershell mit auflisten
Es scheint jedoch keine für die Länge der Übertragungswarteschlange zu geben.
@ Chris J erwähnte die Netzwerkschnittstelle \ Länge der Ausgabewarteschlange. Sie können diesen Wert in der Befehlszeile mit typeperf abrufen .
Der Wert ist jedoch immer 0: http://support.microsoft.com/kb/822226
Windows verfolgt diese Informationen nur in der NIC-Treibersoftware, und es werden nur Pakete pro NIC in die Warteschlange gestellt, und es wird nicht unterschieden, was pro Socket in die Warteschlange gestellt wird.
Wenn Sie das Netzwerk-Debugging in der Befehlszeile durchführen möchten, können alle in perfmon gefundenen Zähler mit typeperf oder logman abgefragt werden .
quelle
Was Sie möchten, sind möglicherweise die Ergebnisse der WinSock-API-Funktionsaufrufe
getsockopt
:SO_RCVBUF
Der gesamte für den Empfang reservierte Pufferplatz pro Socket. DiesSO_MAX_MSG_SIZE
hat nichts mit der Größe des TCP-Empfangsfensters zu tun und entspricht nicht unbedingt dieser.SO_SNDBUF
Der gesamte für Sends reservierte Pufferplatz pro Socket. DiesSO_MAX_MSG_SIZE
hat nichts mit der Größe eines TCP-Sendefensters zu tun und entspricht nicht unbedingt dieser.Das Problem ist, dass nach Sockets gefragt werden kann, deren Handle Sie kennen. Das Abfragen von außen scheint schwierig zu sein. Schauen Sie sich das sysinternale TcpView- Tool an. Mark Russinovich ist wirklich ein Knaller und selbst er liefert die Informationen nicht in seinem Tool. Ich bin mir ziemlich sicher, dass er eine Spalte hinzugefügt hätte, wenn er einen Mittelwert gehabt hätte, um die Werte leicht zu erhalten ...
Ich denke, ein Kernel-Treiber könnte helfen, einen Drilldown in das System durchzuführen, fand aber kein verfügbares Tool. Die Größen können pro Socket festgelegt werden, sodass globale Werte keine Bedeutung haben ...
quelle
Das nächste, was ich finden kann, ist der Leistungsindikator
Network Interface\Output Queue Length
. Dies ist jedoch nicht pro Verbindung - nur pro Schnittstelle und deckt nur die ausgehende Warteschlange ab (offensichtlich nach ihrem Namen).quelle
Jetzt sind die Fenstergrößen pro Sockel unterschiedlich! Die Einstellungen pro Schnittstelle stellen nur die Standardwerte dar.
Ich kenne keine Möglichkeit, die Fenstergröße der einzelnen Sockets anzuzeigen. In Solaris kann dies mit "netstat" gesehen werden.
quelle
Schauen Sie hier: http://support.microsoft.com/kb/224829 .
quelle