Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Программная инженерия > Компьютерное железо
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.08.2019, 18:41   #1
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию Режим "Promiscuous" сетевого адаптера

Всем привет!
Подскажите, на каком уровне включается "неразборчивый режим" сетевой карты, когда она принимает все пакеты, а не только по своему МАС-адресу? Подозреваю, что где-то между уровнями PHY и МАС сетевухи, но где именно и как его можно включить программно?

Скачал даташиты на внешнюю RTL8139 и на чипсеты ICH/PCH (если сеть встроенная), но среди регистров LAN-контроллёра не нашёл даже упоминания о "Promiscuous mode". В регистре статуса есть только биты MAR/BAR/PAM - Multicast/Broadcast/Physical Address соответственно. Но статус только информирует (хотя и в нём нету неразборчивого), а задавать режим вроде должен регистр управления "Control", однако в нём тоже нет такого бита.

Есть утилита "PCI-Scope", которая отображает значение всех регистров из конфигурационного пространства PCI - тоже инфы по-нулям. Гугл советует установить драйвер WinPcap, который включает этот режим - установил, драйвер висит в памяти и неразборчивый режим судя по-всему включился, т.к. появился сервис NPF.

Как отловить процесс включения этого режима драйвером? Дизассемблировать дров толку нет, если не имеешь общего представления картины, поэтому и спрашиваю - может кто в курсе? Заранее благодарю!
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 01.08.2019, 19:20   #2
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Я думаю что все карты изначально работают в этом режиме.
А Promiscuous mode это всего лишь флажок в драйвере. Либо уровнем ниже.

Исключение RTL8139
Смещение 044h-047h
Бит 0 AAP

А вообще насколько помню драйвер включает все 6 битов с 0 по 5
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .

Последний раз редактировалось Pavia; 01.08.2019 в 19:23.
Pavia вне форума Ответить с цитированием
Старый 01.08.2019, 19:44   #3
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Для встроенных сетевых карт

https://www.intel.ru/content/www/ru/...ev-manual.html

Страница 264 руководства регистр RCTL бит 3 UPE promiscuous
Тут по мимо MAC уровня есть ещё и фильтрация по IP так что битов которые надо включить по более чем RTL8139.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .

Последний раз редактировалось Pavia; 01.08.2019 в 19:52.
Pavia вне форума Ответить с цитированием
Старый 02.08.2019, 07:38   #4
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Pavia, респект за информацию!!! особенно за ссылку..

Цитата:
Сообщение от Pavia Посмотреть сообщение
А вообще насколько помню драйвер включает все 6 битов с 0 по 5
Угу.. в даташите на 8139 есть такие, но софт "PCIScope" почему-то говорит, что они в резерве. Получается, что к её регистрам доступ через порты I/O чтоли? Что-то я совсем запутался..

У меня две сетевухи: встроенная RTL8101e, у которой регистры точно в MMIO, т.к. софт отображает её корректно. А вот вторая - внешняя RTL8139 и (судя по свойствам) её дров вообще урезанный. Вот их функционал:

rtl8139.png

Если собрать всё в кучу, то я пришёл к выводу, что на уровне регистров LAN-контроллёра, драйвер карты изначально настраивает её на неразборчивый режим "Promiscuous", а дальше зависит от параметров сокета. Чтобы включить этот режим, нужно создать сырой RAW-сокет c атрибутом "SIO_RCVALL", который и будет прослушивать все поступающие пакеты, не отбрасывая чужие.

Фильтрация пакетов идёт на MAC-уровне сетевой карты,
а точнее в его клиенте LLC (после PHY). На уровне IOCTL-запросов к сокету, код будет таким:
Код:
flags = 1;
   ioctlsocket(sock, SIO_RCVALL, &flags);
Да и сами пакеты должны быть вроде VLAN по стандарту IEEE-802.1Q/P, т.е. в топологии должен быть внутренний мост, что позволит перехватывать пакеты исключительно после коммутатора. В случае с концентратором (хаб) мост уже не нужен.
Нашедшего выход - затаптывают первым..

Последний раз редактировалось R71MT; 02.08.2019 в 07:42.
R71MT вне форума Ответить с цитированием
Старый 02.08.2019, 08:07   #5
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
Сообщение от R71MT Посмотреть сообщение
Угу.. в даташите на 8139 есть такие, но софт "PCIScope" почему-то говорит, что они в резерве. Получается, что к её регистрам доступ через порты I/O чтоли? Что-то я совсем запутался..
PCIScope показывает Вам PCI CFG и не лезет в порты I/O. А бит APP лежит в портах I/O. Смещение дано относительно базового адреса записанного в BAR регистре.

RTL8139 - имеет хитрое устройство. Она может работать и в MMIO режиме. Это определяется настройкой BAR регистра. БИОС настраивает на порты I/O а драйвер винды если захочет может перевести на MMIO. Насколько помню она этого неделает, а продолжает использовать порты.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 02.08.2019, 09:39   #6
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от Pavia Посмотреть сообщение
PCIScope показывает Вам PCI CFG и не лезет в порты I/O.
..спасибо, я так и понял.
а как в винде работают с конфиг/пространством PCI ?
например, могу я из юзера просто считать значения (без записи),
или только драйвером через порты 0CF8-0CFC ?
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 05.08.2019, 17:28   #7
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

..так и не удалось мне включить программно "Promiscuous".
версия WinSock-2.0, система XP/SP3, bing отрабатывает нормально, а здесь получаю ошибку:
Код:
flags = 1;
   ioctlsocket(sock, SIO_RCVALL, &flags);
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно пояснить/прокомментировать код программы, или коды функций "Добавить" "Удалить" "Обновить(редактировать" "Поиск" "Период") ZIRASS PHP 4 15.06.2016 14:23
Вывести количество дней "К" и суммарный пробег "S" С++ Builder XE4 (визуальный режим) программирование Помощь студентам 1 24.01.2014 09:00
Вывести в порядке возрастания все целые числа которые находятся между "А" и "В" С++ (визуальный режим) программирование Помощь студентам 5 23.01.2014 02:14
Вывести количество дней "К" и суммарный пробег "S" С++ Builder XE4 (визуальный режим) программирование Помощь студентам 0 23.01.2014 02:04
Как отключать режим во вкладке "Реценцирование" - "Исправления в изм-ном документе"? ipdima Microsoft Office Word 2 24.08.2012 14:29