Linux netstatは、送信および受信キューのサイズを示します。
Windows、特にServer 2003でこの情報を取得するにはどうすればよいですか?
Linux netstatは、送信および受信キューのサイズを示します。
Windows、特にServer 2003でこの情報を取得するにはどうすればよいですか?
回答:
(これはちょっとした脳のダンプです)
netstatソースのいくつかのバージョンを見ると、探している情報は、Windowsの同等機能を持つソケット関連の呼び出しではなく、カーネル(/ proc / net / ...)から直接照会されているようです。これが本当に決まっている場合は、netstatでどのように取得されているかを調べ、同等のものを提供しているものを見つけます。
あなたはおそらく見ておくべきであるndis.com(ネットワークドライバインタフェース仕様)とPCAUSA.comそれはWindows上でこの情報を取得するためにあなたの最高の場所になりそうだから、ドライバレベルの情報を参照してください。
getsockopt()またはほとんどのWinsockアリーナが役立つ場所になるとは思いませんが、その方向に進みたい場合は、MSDN Winsock情報を確認し、Winsock Programmer's 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ごとにキューに入れられたパケットのみであり、ソケットごとにキューに入れられているものを区別しません。
コマンドラインでネットワークデバッグを実行する場合は、perfmonで見つかったカウンターをtypeperfまたはlogmanを使用して照会できます。
WinSock API関数呼び出しの結果が必要な場合がありますgetsockopt
。
SO_RCVBUF
受信用に予約されたソケットごとの合計バッファースペース。これはSO_MAX_MSG_SIZE
、TCP受信ウィンドウのサイズとは無関係であり、必ずしも対応しているわけではありません。
SO_SNDBUF
送信用に予約されたソケットごとの合計バッファースペース。これはSO_MAX_MSG_SIZE
、TCP送信ウィンドウのサイズとは無関係であり、必ずしも対応しているわけではありません。
問題は、ハンドルがわかっているソケットを要求できることです。外部からのクエリは難しいようです。sysinternalsTcpViewツールを確認してください。マーク・ルシノビッチは本当に亀裂であり、彼も彼のツールで情報を提供していません。彼が値を簡単に取得する手段を持っていたら、彼は列を追加したと思います...
一部のカーネルドライバーはシステムのドリルダウンに役立つ可能性がありますが、使用可能なツールが見つかりませんでした。サイズはソケットごとに設定できるため、グローバル値は意味を持ちません...