パケットスニファであるwindumpにUIを提供するアプリケーションを開発しています。 Windumpには、検出できるすべてのネットワークインターフェイスを一覧表示する「-D」パラメータがあり、リッスンするインターフェイスを指定できます。
ただし、リッスンするインターフェイスを手動で構成するようにユーザーに強制することは避けたいと思います。 Unixでは、ifconfig
の呼び出しと出力の解析によって、適切なネットワークインターフェイス(en0、en1など)を取得できますが、同様の情報を生成できる同等のWindowsAPIまたはコマンドを見つけることができません。 —ipconfig
はこのデータを取得していないようです。
このデータを取得するためにVBScriptを介して呼び出すことができるWindowsコマンドラインツールまたはAPIのいずれかを提案して、ユーザーに適切なインターフェイスを選択するように指示するダイアログをGUIで表示する必要がないようにすることはできますか?
このコマンドは、接続または切断されたステータスのインターフェイスのリストを提供します。
c:\>netsh interface show interface
Admin State State Type Interface Name
-------------------------------------------------------------------------
Enabled Connected Dedicated Local Area Connection
ipconfig /all
を使用して、接続に関する詳細情報を確認できます。 netsh
やnetstat
のような他のユーティリティも他の目的で利用できます。
コーディングの観点から探している場合は、Windowsオペレーティングシステムに関する情報を取得するのに役立つ独自のAPIを作成できるWindowsAPIコードを探す必要があります。WindowsAPIまたは.netで作成されたAPIを使用できます。 ここ はこれらの詳細です。あなたがこれのためにプログラムすることができるならば..
ネットワークに関するすべての情報を取得するためのコードスニペットを次に示します。これらのリンクを確認してください。それらはvbscriptに含めることができるかもしれません。 link1link2linklink4
これがお役に立てば幸いです...
これで問題が解決したようです。
http://shadowbq.blogspot.com/2006/06/windump-finding-pcap-device-mapping.html
これは、アクティブなネットワークインターフェイスにクエリを実行し、それをパラメータとしてwindup.exeに渡すのに適した形式に変換するVBSスクリプトです。
新しいAPIを作成する必要はありません。 VBScriptのWMIクラスを使用します。
http://msdn.Microsoft.com/en-us/library/windows/desktop/aa394216(v = vs.85).aspx
これを行う最善の方法は、最初にNICを列挙しないことです。むしろ、ルーティングテーブルを解析します。これは、コンピュータがパケットをインターネットにルーティングする場所を決定するために使用するのと同じメカニズムであり、これがあなたの主な目標であると私は思います。
例
Set Host = "."
Set WMI = GetObject("winmgmts:\\" & Host & "\root\CIMV2")
Set intIndex = WMI.ExecQuery("SELECT InterfaceIndex FROM Win32_IP4RouteTable WHERE Destination='0.0.0.0'")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter WHERE InterfaceIndex= " & intIndex)
これにより、ルーティングテーブルの一番上にあるアダプタが返されます。