На машине много сетевых адаптеров, нужно найти тот, который используется для трафика в Windows (из .net)

Мое приложение использует веб-сервис. Я контролирую, с какой рабочей станции был запрос, и для этого отправляю 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-адрес. Пожалуйста помогите.


person viko    schedule 01.03.2011    source источник
comment
Здесь мы действительно подходим к сути проблемы — этот MAC-адрес больше не является одноэлементным — множественные сетевые карты — обычное явление. Вам нужна альтернативная система для лицензии, чем MAC, например. ключ или сертификат рабочей станции.   -  person stephbu    schedule 01.03.2011


Ответы (2)


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

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

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

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

person stephbu    schedule 01.03.2011
comment
ОК, для вашего лучшего понимания - я использую MAC-адрес для проверки безопасности, лицензирования системы для подсчета клиентов. На стороне веб-сервиса в БД записывается список MAC-адресов, которые могут подключаться к сервису, причем одна машина должна идентифицироваться одним MAC-адресом, но де-факто MAC-адреса от машин с большим количеством сетевых адаптеров, полученные на стороне сервиса, могут быть разными, что создает проблему для меня. - person viko; 01.03.2011
comment
Две мысли: MAC-адрес может быть подделан пользователем, хотя он предотвратит одновременное использование (две сетевые карты не могут иметь один и тот же MAC-адрес, это не предотвратит повторное использование MAC-адреса). Вы все еще пойманы, имея несколько законных путей, например. Адаптеры беспроводной сети и Ethernet на ноутбуке. - person stephbu; 01.03.2011

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

Вы можете проверить это через GetIPProperties > UnicastAddresses

person MSalters    schedule 01.03.2011
comment
Если MAC-адрес является числом лицензий, и у меня есть ноутбук с а) сетевой картой Ethernet в док-станции и б) беспроводной сетевой картой, она может находиться в четырех состояниях: нет MAC, MAC a, MAC b или MAC a + МАК б. Что будет использовать моя лицензия для моего ноутбука? - person stephbu; 01.03.2011
comment
При подключении через Ethernet MAC a. При подключении через Wi-Fi MAC b. Первое состояние (без MAC-адреса) означает, что вы вообще не подключены, поэтому количество лицензий не имеет значения. - person MSalters; 01.03.2011
comment
OP использует MAC-адрес для распределения лицензий, поэтому наш ноутбук должен быть зарегистрирован для обоих MAC-адресов. Текущая система OP не поддерживает это - он (ошибочно) предположил, что все ПК будут иметь один MAC-адрес. - person stephbu; 01.03.2011