web-dev-qa-db-ja.com

Windowsでアクティブなネットワークインターフェイスを取得する

パケットスニファであるwindumpにUIを提供するアプリケーションを開発しています。 Windumpには、検出できるすべてのネットワークインターフェイスを一覧表示する「-D」パラメータがあり、リッスンするインターフェイスを指定できます。

ただし、リッスンするインターフェイスを手動で構成するようにユーザーに強制することは避けたいと思います。 Unixでは、ifconfigの呼び出しと出力の解析によって、適切なネットワークインターフェイス(en0、en1など)を取得できますが、同様の情報を生成できる同等のWindowsAPIまたはコマンドを見つけることができません。 —ipconfigはこのデータを取得していないようです。

このデータを取得するためにVBScriptを介して呼び出すことができるWindowsコマンドラインツールまたはAPIのいずれかを提案して、ユーザーに適切なインターフェイスを選択するように指示するダイアログをGUIで表示する必要がないようにすることはできますか?

6
Kevin Walzer

このコマンドは、接続または切断されたステータスのインターフェイスのリストを提供します。

c:\>netsh interface show interface

Admin State    State          Type             Interface Name
-------------------------------------------------------------------------
Enabled        Connected      Dedicated        Local Area Connection
8
Paul

ipconfig /allを使用して、接続に関する詳細情報を確認できます。 netshnetstatのような他のユーティリティも他の目的で利用できます。

enter image description here

コーディングの観点から探している場合は、Windowsオペレーティングシステムに関する情報を取得するのに役立つ独自のAPIを作成できるWindowsAPIコードを探す必要があります。WindowsAPIまたは.netで作成されたAPIを使用できます。 ここ はこれらの詳細です。あなたがこれのためにプログラムすることができるならば..

ネットワークに関するすべての情報を取得するためのコードスニペットを次に示します。これらのリンクを確認してください。それらはvbscriptに含めることができるかもしれません。 link1link2linklink4

これがお役に立てば幸いです...

3
Niranjan Singh

これで問題が解決したようです。

http://shadowbq.blogspot.com/2006/06/windump-finding-pcap-device-mapping.html

これは、アクティブなネットワークインターフェイスにクエリを実行し、それをパラメータとしてwindup.exeに渡すのに適した形式に変換するVBSスクリプトです。

0
Kevin Walzer

新しい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) 

これにより、ルーティングテーブルの一番上にあるアダプタが返されます。

0
surfasb