Многие сетевые адаптеры на машине, нужно найти тот, который используется для трафика в Windows (из .net) - PullRequest
1 голос
/ 01 марта 2011

Мое приложение использует веб-сервис. Я контролирую с какой рабочей станции был запрос и для этого отправляю MAC-адрес как параметр всех методов. Но затем я приступил к тестированию приложения в режиме реального времени и обнаружил рабочие станции, которые имеют много сетевых адаптеров - Ethernet, Wireless, Bluetooth. Когда я получу MAC-адрес, используйте следующий код:

var networkAdapters = NetworkInterface.GetAllNetworkInterfaces();
if (networkAdapters == null || networkAdapters.Length == 0)
    return string.Empty;

string address = string.Empty;

foreach (var adapter in networkAdapters)
{
    var a = adapter.GetPhysicalAddress();
    if (a != null && a.ToString() != string.Empty)
    {
        address = a.ToString();
        break;
    }
}
return address;

Иногда Web-сервис получает с рабочей станции разные MAC-адреса, но я хочу всегда получать только один MAC-адрес. Пожалуйста, помогите мне.

Ответы [ 2 ]

0 голосов
/ 01 марта 2011

Вы знаете, какой IP-адрес ваше приложение использует для веб-службы, верно?Только один адаптер будет иметь этот IP-адрес.

Вы можете проверить это с помощью GetIPProperties> UnicastAddresses

0 голосов
/ 01 марта 2011

Если бы у меня было две разные карты Ethernet - два разных MAC-адреса - какой MAC-адрес был бы правильным адресом?

Ответ, который является корнем ответа на этот вопрос.Вы должны создать алгоритм, чтобы выбрать правильный выбор - под рукой много инструментов, позволяющих вам быть более разборчивыми:

  1. GetIsNetworkAvailable==true - определяеттолько интерфейсы с активными соединениями
  2. Speed - позволяет определить наиболее быстрое соединение
  3. NetworkInterfaceType например Ethernet

Даже с учетом этих правил несколько адаптеров могут все же совпадать.например, машина с несколькими сетевыми картами, привязанными к одной локальной сети.Только вы можете определить правила для тай-брейков.

...