считывание MAC-a на низком уровне

Тема в разделе "WASM.NETWORKS", создана пользователем Slayer605, 9 апр 2006.

  1. Slayer605

    Slayer605 New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2006
    Сообщения:
    5
    возник такой вопрос возможно ли считать MAC адрес прямо с железки минуя драйвер?

    если я меняю MAC в свойствах драйвера, то считывание непостедственно с самой карты даст оригинальный MAC ?

    PS нужно под Win32, желательно asm вставку в Си
     
  2. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    То есть ты думаешь , что у сетевухи есть 2 МАС адреса ? - Один настоящий, другой левый ?

    Нет . Такого небывает. Драйвер считывает \ записывает МАС адрес на сетевухе. Просто минуя драйвер тебе надо залезть в нулевое кольцо, остановить сетевуху , обратиться к ее портам. Не гемор ли ? Не проще попросить драйвер ?
     
  3. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    В обход winsock на пользовательском уровне ничего нельзя сделать, AFAIK. Я как-то хотел отключить поле чексум в пакетах UDP. Пришлось писать драйвер.
     
  4. ECk

    ECk Member

    Публикаций:
    0
    Регистрация:
    9 апр 2004
    Сообщения:
    454
    Адрес:
    Russia
    Посмотри даташиты вендоров (такой распространенный как Realtek 839, например, или Intel) - судя по документации, там есть способы для таких задач. Потом, кратковременно остановить девайс можно опять же путем обращений в те же порты девайса и конфиг пространство (бит запрета прерываний от девайса). Конечно не факт, что все вендоры имеют такие возможности, но тебе видимо все и не нужны?

    Это в некотором роде вендорозависимый метод, но если ты опознаешь девайс и вендора перед изменением MAC и используешь соответствующие bitmap данного вендора - все возможно.



    А если тебе это надо сделать из юзера - используй ZwSystemDebugControl (>=ХР)
     
  5. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    Если хочешь геморроя - работай прямо с железом. Хочешь универсальности - работай через NDIS. В любом случае придется использовать драйвер.
     
  6. ash

    ash New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2004
    Сообщения:
    52
    Адрес:
    Latvia
    Ms Rem А как учесть тех, кто хочет на разных уровнях вставлять свой MAC?
     
  7. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    Если послать запрос OID_802_3_PERMANENT_ADDRESS с помощью NdisRequest, то вернется MAC прошитый в сетевуху, если OID_802_3_CURRENT_ADDRESS - то текущий используемый MAC.

    Только для начала тебе надо зарегистировать свой протокол и открыть нужные адаптеры. Примеры смотри в сорцах winpcap.
     
  8. ash

    ash New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2004
    Сообщения:
    52
    Адрес:
    Latvia
    Ой, а если кто-то это перехватит? Или если прошили и перед запросом и после тоже?



    /me так и думает, как бы гемороя кому-нить добавить ;)
     
  9. Slayer605

    Slayer605 New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2006
    Сообщения:
    5
    Ms Rem спасибо буду искать :)
     
  10. Slayer605

    Slayer605 New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2006
    Сообщения:
    5
    скачал http://www.winpcap.org/install/bin/WpdPack_3_1.zip

    нашел там как раз то что надо WpdPack\Examples-remote\PacketDriver\GetMacAddress\getmacaddress.c

    но скомпилировать не получается...

    packet32.h(208) : error C2079: 'IPAddress' uses undefined struct 'sockaddr_storage'

    packet32.h(209) : error C2079: 'SubnetMask' uses undefined struct 'sockaddr_storage'

    packet32.h(210) : error C2079: 'Broadcast' uses undefined struct 'sockaddr_storage'

    Error executing cl.exe.