Идентификация интерфейса активной сети

В приложении.NET, как я могу определить, какой сетевой интерфейс используется для передачи с данным IP-адресом?

Я работаю на рабочих станциях с несколькими сетевыми интерфейсами, IPv4 и v6, и я должен получить адрес "корректного" интерфейса, привыкшего для трафика к моему данному серверу базы данных.

25
задан svick 22 November 2013 в 18:42
поделиться

4 ответа

Самый простой путь был бы:

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 свойство).

35
ответ дан Yariv 28 November 2019 в 21:01
поделиться

Информация, которая Вы после, будет в 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 каждого адаптера (максимальная скорость, производитель и т.д.)

3
ответ дан Paul Nearney 28 November 2019 в 21:01
поделиться

По крайней мере, можно запустить с этого, дав Вам всем адреса из DNS для локальной машины.

IPHostEntry hostEntry = Dns.GetHostEntry(Environment.MachineName);

foreach (System.Net.IPAddress address in hostEntry.AddressList)
{
    Console.WriteLine(address);
}
1
ответ дан Oliver Friedrich 28 November 2019 в 21:01
поделиться

Ни один из них на самом деле не даст OP информацию, которую он ищет - он хочет знать, какой интерфейс будет использоваться для достижения данного места назначения. Один способ сделать, что Вы хотите, состоял бы в том, чтобы выйти из оболочки к маршрут команда с помощью Системы. Диагностика. Класс процесса, затем экранное царапанье вывод. route PRINT (destination IP) получит Вас что-то применимое. Это, вероятно, не лучшее решение, но это - единственное, которое я могу дать Вам прямо сейчас.

5
ответ дан Coderer 28 November 2019 в 21:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: