Хочу сменить MAC адрес сетевой карны. Пересмотрел некоторые из чужих исходников. Все идут в реестр, правят или создают там параметры. Затем передергивают сетевую карту по принципу как из статьи "Безопасное извлечение USB-устройств" есть тут на сайте. Но пока смотрел как с помощью winpcap считать MAC оказалось что ... Код (Text): int getmac(pcap_t* ha, char* pStr) { PPACKET_OID_DATA pOidData; CHAR pAddr[sizeof(PACKET_OID_DATA)+5]; ZeroMemory(pAddr, sizeof(PACKET_OID_DATA)+5); pOidData = (PPACKET_OID_DATA) pAddr; pOidData->Oid = OID_802_3_CURRENT_ADDRESS; pOidData->Length = 6; if(PacketRequest(ha->adapter, FALSE, pOidData)) { sprintf(pStr, "%.02X:%.02X:%.02X:%.02X:%.02X:%.02X", pOidData->Data[0],pOidData->Data[1],pOidData->Data[2], pOidData->Data[3],pOidData->Data[4],pOidData->Data[5]); }else{ return 0; } return 1; } .... если у функции PacketRequest() второй параметр TRUE ... Код (Text): PacketRequest(ha->adapter, TRUE, pOidData)) ... то ведется не считывание а запись значения MAC из pOidData. Пробую. 1. Заполняю pOidData новым MAC - ом. 2. Oid = OID_802_3_CURRENT_ADDRESS 3. ha->adapter - валидный Но после отработки PacketRequest(ha->adapter, TRUE, pOidData) возвращает ошибку 000001 - "Неверная функция". Может OID не тот? Может так вообще MAC не сменить? Подскажите кто что может ))) plz PS. Про уголовную ответственность по статье 272 УК - в курсе, "бабушка звонила" )))
T800 Скачал исходники с офсайта. Вычитал что смена MAC должна сопровождаться обработкой сообщения IOCTL_NDISPROT_SET_OID_VALUE в NDIS драйвере. Обработка должна вызывать функцию ndisprotSetOidValue() Поискал по исходниках строки "IOCTL_NDISPROT_SET_OID_VALUE", "ndisprotSetOidValue" - их нет. Не знаю правильно или нет ))) но думаю, что смена MAC в WinPcap все же не предусмотрена. (( Подскажите я правильно рассуждаю? Просто в написании драйверов пока не рублю вообще. ((
_sheva740 У вас вообще подход странный. Нафига вам вообще менять MAC, коли WinPCap позволяет посылать в сеть RAW пакеты.
T800 RAW - пакеты, ... то есть те которые с MAC отправителя != моему MAC-у? Потому как бы и MAC менять не надо? Не удивляйтесь пожалуйста моим вопросам )) Это конечно облегчает задачу. Я попробую. Спасибо. ))
RAW - пакеты ето пакеты которые не привязаны к конкретному протоколу и позволяют роботать с сетью на прямую.(Хотя корректней было бы говорить о RAW сокетах) MAC - это грубо говоря номер сетевого адаптера. Нужен для идентификации конкретного компьютера в сети. С RAW-пакетами можно роботать, и если ты отправляешь пакеты на свой компьютер.
Насколько я понимаю WinPcap аналог Pcap(Packet Capture) для Win платформ, и данные библиотеки в первую очередь были разроботаны для анализа данных поступаюших на сетевой интерфейс.
LeaLNoFiE Несколько месяцев назад под винду писал флудер на WinPCap, т.к. винда уже давно не позволяет работать с RAW пакетами. Вот так мордочка выглядит:
T800 Я не спорю насчет того, что может Pcap, а чего не может Я пишу под Linux, но насколько я знаю на платформе Windows есть интерфейс NDIS, который позволяет роботать с сетью в сыром виде в 0м кольце, и библиотеки WinPCAP именно на него и операються. Другой вопрос состоит в том что функциональность сырых сокетов в 3м кольце, оставляет желать лучшего, и робота с ними доступна только с учетной записью администратора. Простой запрос в гугл дал следуюшие: http://msdn.microsoft.com/en-us/library/windows/desktop/ms740548(v=vs.85).aspx