Linux netstat mostra le dimensioni della coda di invio e ricezione.
Come posso ottenere queste informazioni su Windows, in particolare Server 2003?
Linux netstat mostra le dimensioni della coda di invio e ricezione.
Come posso ottenere queste informazioni su Windows, in particolare Server 2003?
Risposte:
(questo è un po 'una scarica di cervello)
Osservando un paio di versioni del sorgente netstat, sembra che le informazioni che stai cercando vengano interrogate direttamente dal kernel (/ proc / net / ...) non tramite chiamate relative al socket che hanno equivalenti di Windows. Se sei davvero determinato ad avere questo, guarderei come viene recuperato in netstat e vedo cosa puoi trovare che fornisce qualcosa di equivalente.
Probabilmente dovresti guardare ndis.com (Network Interface Interface Specification) e PCAUSA.com per informazioni a livello di driver, perché è probabilmente il posto migliore dove recuperare queste informazioni su Windows.
Non credo che getsockopt () o la maggior parte dell'arena di Winsock ti porterà ovunque utile, ma se vuoi andare in quella direzione guarda le informazioni di WDN su MSDN e controlla anche le FAQ di Winsock Programmer .
Per inbound, potresti essere in grado di ottenere qualcosa di utile dalla funzione ioctlsocket () con FIONREAD per ottenere la quantità di dati leggibili per un socket; potresti non essere in grado di ottenere questo attraverso i processi e, a seconda del tipo di dati, potrebbe restituire informazioni per il primo blocco di dati e non per l'intera coda se è presente più di un elemento in coda.
In questo contesto potresti fare qualche ricerca sul "backlog", ma la maggior parte di ciò che ho visto sembra riguardare l'impostazione della dimensione massima per gestire le inondazioni di SYN, non con la reale entità del backlog effettivo.
Se sei davvero determinato, potresti essere in grado di fare qualcosa con il tuo Layered Service Provider , ma questa è una strada strana e brutta piena di pericoli e suggerirò di starne alla larga.
AGGIORNAMENTO: Dopo aver cercato un po 'di più, penso sicuramente che dovresti cercare di interrogare gli OID NDIS. Trovare le informazioni più rilevanti per te è lasciato come un esercizio tra te, MSDN e TechNet.
Questa domanda è vecchia ma volevo aggiungere alcune informazioni. È un risultato di ricerca abbastanza alto su Google.
Per quanto ne so non c'è un modo per farlo, ma se qualcuno può fare di più scavando e capire una valida alternativa che sarebbe molto apprezzata!
Come ha sottolineato @Fencepost nella sua risposta, puoi provare a interrogare gli OID NDIS. L'OID NDIS più pertinente che ho trovato è OID_GEN_TRANSMIT_QUEUE_LENGTH
La maggior parte degli OID NDIS sono associati a classi WMI, con cui è possibile elencarli in PowerShell
Get-WmiObject -Namespace root\wmi -List | Where-Object {$_.name -Match "MSNdis" } | Sort-Object
ma non sembra essercene uno per Lunghezza coda di trasmissione.
@Chris J ha menzionato Interfaccia di rete \ Lunghezza coda di emissione. È possibile ottenere questo valore dalla riga di comando con typeperf .
typeperf "\Network Interface(*)\Output Queue Length" -sc 1
Ma il valore è sempre 0: http://support.microsoft.com/kb/822226
Windows tiene traccia di queste informazioni solo nel software del driver NIC, ed è solo pacchetti in coda per NIC e non distingue tra ciò che è in coda per socket.
Se si desidera eseguire il debug della rete sulla riga di comando, è possibile eseguire query su qualsiasi contatore trovato in perfmon utilizzando typeperf o logman .
Quello che vuoi potrebbero essere i risultati delle chiamate alla funzione API WinSock getsockopt
:
SO_RCVBUF
Lo spazio buffer totale per socket riservato per riceve. Ciò non è correlato SO_MAX_MSG_SIZE
e non corrisponde necessariamente alla dimensione della finestra di ricezione TCP.
SO_SNDBUF
Lo spazio totale per buffer del socket riservato per gli invii. Questo non è correlato SO_MAX_MSG_SIZE
e non corrisponde necessariamente alla dimensione di una finestra di invio TCP.
Il problema è che possono essere richiesti socket di cui conosci la maniglia. Interrogare dall'esterno sembra essere difficile, dai un'occhiata allo strumento TcpView sysinternals . Mark Russinovich è davvero una crepa e anche lui non fornisce le informazioni nel suo strumento. Sono abbastanza sicuro che avrebbe aggiunto una colonna se avesse avuto un mezzo per ottenere facilmente i valori ...
Immagino che alcuni driver del kernel potrebbero aiutare a scavare nel sistema ma non hanno trovato nessuno strumento disponibile. Le dimensioni possono essere impostate su una base socket in modo che i valori globali non abbiano alcun significato ...
Dai un'occhiata qui: http://support.microsoft.com/kb/224829 .