NoorKaximi Ответов: 2

Как обнаружить беспорядочный режим сетевого интерфейса в C#?


Я создаю приложение для определения того, находится ли сетевой интерфейс в беспорядочном режиме или нет.
Мы можем обнаружить его, отправив ping (ICMP echo request) с неправильным MAC-адресом, но правильным IP-адресом. Если адаптер работает в обычном режиме, он отбросит этот кадр, и стек IP никогда не увидит его и не ответит на него. Если адаптер находится в неразборчивом режиме, кадр будет передан дальше, и IP-стек на машине (для которого MAC-адрес не имеет значения) будет реагировать так же, как и на любой другой пинг.
Но я не знаю, как это реализовать в c#.

Что я уже пробовал:

Я пробовал этот код, но он дает мне mac-адрес для любого конкретного ip-адреса.

if (SendArp(ip, 0, macAddr, ref macAddrLen) != 0)
{
    return false;
}
else
{
   }

2 Ответов

Рейтинг:
1

RickZeeland

Вы можете использовать WMI чтобы получить MAC-адрес(адреса), см. Этот пост:
C# получить MAC-адрес компьютера "OFFLINE" - переполнение стека[^]


NoorKaximi

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

Ralf Meier

Что вы имеете в виду под "беспорядочным режимом" ?
Существует множество возможных переводов этого слова с разным смыслом ...

NoorKaximi

В компьютерных сетях беспорядочный режим (часто сокращенный до " promisc mode "или" promisc. mode") - это режим для контроллера проводного сетевого интерфейса (NIC) или контроллера беспроводного сетевого интерфейса (WNIC), который заставляет контроллер передавать весь трафик, который он получает, центральному процессору (CPU), а не передавать только кадры, которые контроллер предназначен принимать.

Ralf Meier

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

NoorKaximi

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

NoorKaximi

Пожалуйста, предоставьте мне полный код...

Ralf Meier

Я не могу помочь вам с кодом для этого-но я думаю, что он все еще у вас есть.
Но я могу помочь вам изменить этот код на циклический рабочий ...

NoorKaximi

я не думаю, что сделать его циклическим будет работать...

Ralf Meier

Прежде чем вы обновили свой вопрос, у вас был совершенно другой код.
Что случилось с этим кодом ?

NoorKaximi

Я удалил лишние коды.
Это основная функция, с помощью которой я пытаюсь достичь своей цели.

Рейтинг:
0

Graeme_Grant

От StackOverflow[^]

Цитата:

Используйте System. Management для таких запросов. Класс MSFT_NetAdapter, свойство PromiscuousMode. Используйте WMI Code Creator для экспериментов и получения правильного кода C#. - Ганс Пассант


NoorKaximi

пробовать
{
ManagementObjectSearcher searcher =
новый ManagementObjectSearcher ("root\ \ StandardCimv2",
"Выберите * из MSFT_NetAdapter");

foreach (ManagementObject queryObj в searcher. Get())
{
Приставка.метод WriteLine("-----------------------------------");
Приставка.WriteLine ("Name: {0}", queryObj ["Name"]);

Приставка.WriteLine ("PromiscuousMode: {0}", queryObj ["PromiscuousMode"]);

}
}
catch (ManagementException e)
{
Ящик для сообщений.Show ("произошла ошибка при запросе данных WMI:" + e. сообщение);
}
Я попробовал приведенный выше код, но он не работает, он возвращает беспорядочный режим false, хотя я включил его с помощью wireshark. Помощью Wireshark показывают беспорядочный режим включен, но WMI-запрос должен возвращать false при смешанном режиме