Я использую следующий код, чтобы получить адрес шлюза IPv4 локального компьютера.
var interfaces = System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces();
var wifi = interfaces[3];
var gatewayAddresses = wifi.GetIPProperties().GatewayAddresses;
var gateway = gatewayAddresses[0].Address.ToString();
IPv4GatewayValueLabel.Text = gateway;
который работает нормально, но я выбираю интерфейс (тот, который активен) вручную. Я хочу выбрать его программно.
Я сделал некоторую отладку. NetworkInterface.GetAllNetworkInterfaces()
возвращает список интерфейсов. В моем случае их 7. Я искал свойство, которое отличает активный интерфейс от остальных, и нашел OperationalStatus
, но это не совсем надежно.
Я подключен к Интернету с помощью своего мобильного телефона (точка доступа Wi-Fi), и это список интерфейсов, который я получаю:
0:
Description "Microsoft Wi-Fi Direct Virtual Adapter"
OperationalStatus Down
1:
Description "Bluetooth Device (PAN)"
OperationalStatus Down
2:
Description "Realtek PCIe FE Family Controller"
OperationalStatus Down
3:
Description "Dell Wireless 1701 802.11b/g/n"
OperationalStatus Up
4:
Description "Software Loopback Interface 1"
OperationalStatus Up
5:
Description "Microsoft ISATAP Adapter"
OperationalStatus Down
6:
Description "Teredo Tunneling Pseudo-Interface"
OperationalStatus Down
Как видите, есть два интерфейса со значением Up
. Кроме того, я не был уверен, что этот список исправлен, поэтому в этот раз я подключился с помощью USB-модема, и список интерфейсов немного изменился:
0:
Description "SAMSUNG Mobile USB Remote NDIS Network Device"
OperationalStatus Up
1:
Description "Microsoft Wi-Fi Direct Virtual Adapter"
OperationalStatus Down
2:
Description "Bluetooth Device (PAN)"
OperationalStatus Down
3:
Description "Realtek PCIe FE Family Controller"
OperationalStatus Down
4:
Description "Dell Wireless 1701 802.11b/g/n"
OperationalStatus Down
5:
Description "Software Loopback Interface 1"
OperationalStatus Up
6:
Description "Teredo Tunneling Pseudo-Interface"
OperationalStatus Up
7:
Description "Microsoft ISATAP Adapter #2"
OperationalStatus Down
Следовательно, я не могу полагаться на OperationalStatus
, я думаю. Как я могу заставить это работать?