Linux netstat pokazuje rozmiary kolejek wysyłania i odbierania.
Jak uzyskać te informacje w systemie Windows, a konkretnie Server 2003?
linux
windows
networking
tcpip
Izzy
źródło
źródło
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.
źródło
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
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 .
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 .
źródło
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ązaneSO_MAX_MSG_SIZE
i niekoniecznie odpowiada rozmiarowi okna odbioru TCP.SO_SNDBUF
Łączna przestrzeń bufora na gniazdo zarezerwowana dla wysyłek. Jest to niezwiązaneSO_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 ...
źródło
Najbliższą rzeczą, jaką mogę znaleźć, jest licznik wydajności
Network Interface\Output Queue Length
. Nie dotyczy to jednak połączenia - dotyczy tylko interfejsu i obejmuje tylko kolejkę wychodzącą (oczywiście według nazwy).źródło
Teraz rozmiary okien są różne dla poszczególnych gniazd! Ustawienia dla interfejsu reprezentują tylko wartości domyślne.
Nie wiem, jak wyświetlić rozmiar okna każdego gniazda. W Solarisie można to zaobserwować za pomocą „netstat”.
źródło
Zajrzyj tutaj: http://support.microsoft.com/kb/224829 .
źródło