Самый простой путь был бы:
UdpClient u = new UdpClient(remoteAddress, 1);
IPAddress localAddr = ((IPEndPoint)u.Client.LocalEndPoint).Address;
Теперь, если Вы хотите объект NetworkInterface, Вы делаете что-то как:
foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
{
IPInterfaceProperties ipProps = nic.GetIPProperties();
// check if localAddr is in ipProps.UnicastAddresses
}
Другая опция состоит в том, чтобы использовать P/Invoke и вызов GetBestInterface () для получения интерфейсного индекса, с другой стороны цикл по всем сетевым интерфейсам. Как прежде, необходимо будет вырыть до GetIPProperties()
для получения до IPv4InterfaceProperties.Index
свойство).
Информация, которая Вы после, будет в WMI.
Этот пример с помощью WMI может получить Вас большая часть пути:
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 даст Вам информацию о конфигурации Ваших адаптеров, например, IP-адресов и т.д.
Можно также запросить класс Win32_NetworkAdapter для обнаружения 'static'about каждого адаптера (максимальная скорость, производитель и т.д.)
По крайней мере, можно запустить с этого, дав Вам всем адреса из DNS для локальной машины.
IPHostEntry hostEntry = Dns.GetHostEntry(Environment.MachineName);
foreach (System.Net.IPAddress address in hostEntry.AddressList)
{
Console.WriteLine(address);
}
Ни один из них на самом деле не даст OP информацию, которую он ищет - он хочет знать, какой интерфейс будет использоваться для достижения данного места назначения. Один способ сделать, что Вы хотите, состоял бы в том, чтобы выйти из оболочки к маршрут команда с помощью Системы. Диагностика. Класс процесса, затем экранное царапанье вывод. route PRINT (destination IP)
получит Вас что-то применимое. Это, вероятно, не лучшее решение, но это - единственное, которое я могу дать Вам прямо сейчас.