Linux netstat pokazuje rozmiary kolejek wysyłania i odbierania.
Jak uzyskać te informacje w systemie Windows, a konkretnie Server 2003?
Linux netstat pokazuje rozmiary kolejek wysyłania i odbierania.
Jak uzyskać te informacje w systemie Windows, a konkretnie Server 2003?
Odpowiedzi:
(to trochę zrzut mózgu)
Patrząc na kilka wersji źródła netstat, wydaje się, że informacje, których szukasz, są wyszukiwane bezpośrednio z jądra (/ proc / net / ...), a nie za pośrednictwem wywołań związanych z gniazdami, które mają odpowiedniki w systemie Windows. Jeśli jesteś naprawdę zdeterminowany, aby to mieć, spojrzę na to, jak jest pobierane w netstat i zobaczę, co możesz znaleźć, co zapewnia coś równoważnego.
Prawdopodobnie powinieneś spojrzeć na ndis.com (specyfikację interfejsu sterownika sieciowego) i PCAUSA.com w celu uzyskania informacji na poziomie sterownika, ponieważ prawdopodobnie jest to najlepsze miejsce do uzyskania tych informacji w systemie Windows.
Nie wierzę, że getsockopt () lub większość areny Winsock przyniesie Ci wszędzie przydatne, ale jeśli chcesz iść w tym kierunku, spójrz na informacje MSDN Winsock, a także sprawdź FAQ Winsock Programmer .
W przypadku ruchu przychodzącego możesz uzyskać coś przydatnego z funkcji ioctlsocket () z FIONREAD, aby uzyskać ilość czytelnych danych dla gniazda; możesz nie być w stanie uzyskać tego między procesami i w zależności od rodzaju danych może zwrócić informacje tylko dla pierwszego bloku danych, a nie dla całej kolejki, jeśli w kolejce jest więcej niż jeden element.
W tym kontekście możesz trochę kopać „zaległości”, ale większość tego, co widziałem, wydawało się mieć związek z ustawieniem maksymalnego rozmiaru do radzenia sobie z powodzią SYN, a nie z faktem, jak duże było rzeczywiste zaległości.
Jeśli jesteś naprawdę zdeterminowany, możesz być w stanie zrobić coś ze swoim własnym dostawcą usług warstwowych , ale to dziwna i brzydka droga pełna niebezpieczeństw i proponuję trzymać się od niej z daleka.
AKTUALIZACJA: Po nieco dokładniejszej analizie uważam, że powinieneś przyjrzeć się zapytaniom OID NDIS. Znalezienie najbardziej odpowiednich dla Ciebie informacji jest ćwiczeniem pomiędzy Tobą, MSDN i TechNet.
To pytanie jest stare, ale chciałem dodać trochę informacji. To dość wysoki wynik wyszukiwania w Google.
O ile mogę stwierdzić, nie ma na to sposobu, ale jeśli ktoś może więcej kopać i wymyślić prawidłową alternatywę, byłoby to bardzo mile widziane!
Jak wskazał @Fencepost w swojej odpowiedzi, możesz spróbować wysłać zapytanie do OID NDIS. Najbardziej odpowiedni NDIS OID, jaki znalazłem, to OID_GEN_TRANSMIT_QUEUE_LENGTH
Większość identyfikatorów NDIS OID jest mapowanych na klasy WMI, możesz je wymienić w PowerShell z
Get-WmiObject -Namespace root\wmi -List | Where-Object {$_.name -Match "MSNdis" } | Sort-Object
ale wydaje się, że nie ma jednego dla długości kolejki transmisji.
@Chris J wspomniał Interfejs sieciowy \ Długość kolejki wyjściowej. Możesz uzyskać tę wartość w wierszu poleceń za pomocą typeperf .
typeperf "\Network Interface(*)\Output Queue Length" -sc 1
Ale wartość wynosi zawsze 0: http://support.microsoft.com/kb/822226
System Windows śledzi tylko te informacje w oprogramowaniu sterownika karty sieciowej, i to tylko pakiety umieszczone w kolejce na kartę sieciową, i nie rozróżnia między kolejkami na gniazdo.
Jeśli chcesz przeprowadzić debugowanie sieciowe w wierszu poleceń, możesz zapytać o dowolne liczniki znalezione w perfmon przy użyciu typeperf lub logman .
To, czego oczekujesz, może być wynikiem wywołań funkcji WinSock API getsockopt
:
SO_RCVBUF
Całkowita przestrzeń buforowa na gniazdo zarezerwowana dla odbiorników. Jest to niezwiązane SO_MAX_MSG_SIZE
i niekoniecznie odpowiada rozmiarowi okna odbioru TCP.
SO_SNDBUF
Łączna przestrzeń bufora na gniazdo zarezerwowana dla wysyłek. Jest to niezwiązane SO_MAX_MSG_SIZE
i niekoniecznie odpowiada rozmiarowi okna wysyłania TCP.
Problem polega na tym, że można zapytać o gniazda, których uchwyt znasz. Zapytania z zewnątrz wydają się trudne, spójrz na narzędzie TysTcView sysinternals . Mark Russinovich jest naprawdę crack i nawet on nie podaje informacji w swoim narzędziu. Jestem pewien, że dodałby kolumnę, gdyby miał sposób na łatwe uzyskanie wartości ...
Wydaje mi się, że jakiś sterownik jądra mógłby pomóc w wierceniu w systemie, ale nie znalazł żadnego dostępnego narzędzia. Rozmiary można ustawić dla podstawy gniazda, aby wartości globalne nie miały znaczenia ...
Zajrzyj tutaj: http://support.microsoft.com/kb/224829 .