3

C#/.NET を使用してネットワーク接続をリセットする最良の方法は何ですか?

私の会社には、さまざまな手段 (3G、wifi、イーサネット ケーブル) で接続する顧客がいるいくつかのマシンがあり、時々 (特に 3G を使用する場合)、接続していないときにまだ接続していると Windows に報告しています。接続が本当にライブかどうかを確認する方法はありますが、リセットするのに苦労しています。ここに 1 つの問題があります。

var searcher = new ManagementObjectSearcher("select * from Win32_NetworkAdapter");
var managementObject = searcher.Get();
foreach (ManagementObject obj in managementObject)
{
    var name = obj.Properties["Name"].Value.ToString();
    Console.WriteLine(name);
    obj.InvokeMethod("Disable", null);
    obj.InvokeMethod("Enable", null);
}

ご覧のとおり、これはすべてのネットワーク アダプターを経由してリセットされますが、これはやりたくありません。さらに、一部のアダプターは null パラメーターを受け入れません。

これで、必要な NetworkInterface オブジェクトを取得できます。

var interfaces = NetworkInterface.GetAllNetworkInterfaces().Where(ni => ni.IsReceiveOnly == false && 
            ni.OperationalStatus == OperationalStatus.Up && ni.NetworkInterfaceType != NetworkInterfaceType.Loopback);

しかし、NetworkInterface クラスには Start()、Stop()、Reset() などのメソッドがないようです。ここからどこへ行けばいいですか?

4

3 に答える 3

2

少し単純すぎるかもしれませんが、新しいプロセスから ipconfig /renew を呼び出すことはできますか?

Process.Start("ipconfig", "/renew");

または、この同様の質問では、netsh の使用について説明しています。プロセスからも呼び出すことができると思います。C# でプログラムによってネットワーク アダプターを無効にする (またはリセットする) 方法

于 2013-08-06T08:58:28.487 に答える
1

Win32 API が必要です:

コード例:

MIB_TCPROW row = new MIB_TCPROW();
row.dwState = TcpState.DeleteTcb;
row.dwLocalAddr = ...;
row.dwLocalPort = ...;
row.dwRemoteAddr = ...;
row.dwRemotePort = ...;
SetTcpEntry(ref row);
于 2013-08-06T09:51:58.133 に答える