2

NetworkInterface.GetAllNetworkInterfaces()を使用して、PC上のすべてのインターフェイスを取得しています。ただし、これは「アクティブな」インターフェイスのみを返すように見えます。.NETで、接続されていないVPN、無効になっているNICなどの「非アクティブな」ネットワークインターフェイスを見つけるにはどうすればよいですか。

「コントロールパネル」→「ネットワーク接続」で名前で検索したいのですが。たとえば、「My Work」という名前のVPNがある場合、「MyWork」という名前を使用してVPNを見つけられるようにしたいと思います。

Win32_NetworkAdapterConfigurationを使用すると、「ネットワーク接続」に表示されている名前が返されないため、オプションではないようです(私が見る限り)。

どうもありがとう、

RB。

4

4 に答える 4

2

わかりました、これは名前付き VPN を検出するためのハックなソリューションです。何らかの理由で VPN に接続できない場合 (ネットワーク接続がダウンしている、VPN が存在しないなど)、エラーがスローされます。

テストする特定のエラー コードは次のとおりです。

リモート アクセス エラー 800 - VPN 接続を確立できません。
VPN サーバーに到達できないか、セキュリティ パラメータがこの接続に対して適切に構成されていない可能性があります。

リモート アクセス エラー 623 - システムは、この接続の電話帳エントリを見つけることができませんでした。

提起された私の質問に実際には答えません(ただし、実際の問題には十分に機能します)。

Dim p As New Process

p.StartInfo.UseShellExecute = False
p.StartInfo.RedirectStandardOutput = True
p.StartInfo.RedirectStandardError = True
p.StartInfo.FileName = "rasdial.exe"
p.StartInfo.Arguments = """Company HQ"""
p.Start()
If Not p.WaitForExit(My.Settings.VpnTimeout) Then
    Throw New Exception( _
String.Format("Connecting to ""{0}"" VPN failed after {1}ms", sVpn, My.Settings.VpnTimeout))
End If

If p.ExitCode <> 0 Then
    Throw New Exception( _
String.Format("Failed connecting to ""{0}"" with exit code {1}. Errors {2}", sVpn, p.ExitCode, p.StandardOutput.ReadToEnd.Replace(vbCrLf, "")))
End If
于 2008-12-08T16:24:18.703 に答える
1
RasDialer dialer = new RasDialer();
ReadOnlyCollection<RasConnection> connections = dialer.GetActiveConnections();

foreach (RasConnection connection in connections)
{
    // Do what you want to with the connections.
}

これにより、Windowsで使用されているすべての接続されたダイヤルアップエントリ(VPN接続を含む)が、関連するハンドルやその他の情報とともに取得されます。

そのコンポーネントは、CodePlexのDotRasプロジェクトの一部です。

http://www.codeplex.com/DotRas

于 2009-03-25T15:46:11.050 に答える
1

WMI を使用したこの例では、ほとんどの方法を理解できます (ちなみに C# については申し訳ありません!)。

using System.Management;

string query = "SELECT * FROM Win32_NetworkAdapterConfiguration";
ManagementObjectSearcher moSearch = new ManagementObjectSearcher(query);
ManagementObjectCollection moCollection = moSearch.Get();

// Every record in this collection is a network interface
foreach (ManagementObject mo in moCollection)
{
    // Do what you need to here....
}

アダプターが有効になっているかどうかをテストするには、次のリンクが役立ちます。

Win32_NetworkAdapterConfiguration クラス

編集: Win32_NetworkAdapterクラスでもっとうまくいくかもしれません - Caption と Description プロパティがあり、必要なものが得られるかもしれません。この情報を、私が言及した前のクラスと関連付けて、IP アドレスなどを取得する方法があります。さらに調査しないと、それが何であるかはわかりませんが、知る必要がある場合はお知らせください。

于 2008-12-08T14:50:49.017 に答える
0

OK - 最後の溝の努力:)

Win32_NetworkConnectionクラスはどうですか- これで VPN 接続が処理されると確信しています

于 2008-12-08T16:28:28.570 に答える