Заголовок Ethernet пакета.

Тема в разделе "WASM.NETWORKS", создана пользователем Quark, 21 апр 2008.

  1. Quark

    Quark New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    211
    Я в ловлю сырые пакеты. Мне нужно выводить информацию, типа mac адрес и т.п. Вот для этого собственно необходимо знать как выглядит заголовок ethernet пакета. В ДДК искал, так и не нашёл; в СДК есть какие-то структуры, но видать тоже не то... хотелось бы увидеть его описание.
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    первая ссылка гугла выводит на страничку с описанием езернет-фрейма..
    как я помню:

    typedef UCHAR MAC_ADDRESS[6];
    #pragma pack(1)

    struct EthFrame
    {
    MAC_ADDRESS Destination;
    MAC_ADDRESS Source;
    USHORT Type;
    };

    ща если порою найду структурку из работающего драйвера-фильтра NDIS, который я когдато писал и примерный кодес анализа
     
  3. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    да, я оказался прав. нашел у себя в сорце:

    Код (Text):
    1. // Ethernet protocols
    2. #define ETHERNET_PROTOCOL_IP 0x0800
    3. #define ETHERNET_PROTOCOL_ARP 0x0806
    4. ..
    5.  
    6. #pragma pack(1)
    7.  
    8. // MAC Address
    9. typedef UCHAR MAC_ADDRESS[6];
    10.  
    11. // Ethernet header
    12. struct ETHERNET_HDR {
    13.     MAC_ADDRESS Destination;
    14.     MAC_ADDRESS Source;
    15.     USHORT Protocol;
    16. };
     
  4. Quark

    Quark New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    211
    Хех.. видел я эту структуру, просто не думал что заголовок всего 14 байт... думал там ещё куча всего помимо MAC адресов.

    Так... Я перевожу карточку в неразборчивый режим, но ведь при закрытии адаптера, по идее нужно перевести её обратно... что-то я не видел в примерах этого... или в этом нет необходимости?
     
  5. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    В RFC такие вещи точно описанны.
     
  6. Novi4ek

    Novi4ek New Member

    Публикаций:
    0
    Регистрация:
    3 авг 2007
    Сообщения:
    317
    Греат а что за сорец
     
  7. Quark

    Quark New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    211
    Непонятен кусок кода:

    PNDIS_PACKET Packet;

    ...

    NdisAllocatePacket(.. &Packet...);
    RESERVED(Packet)->pHeaderBufferP = ExAllocatePool ...

    Во-первых не могу найти описание макроса RESERVED, но на сколько я понимаю, это ничто иное как обращение к полям структуры p_ndis_packet->Private.Head (там больше не к чему обращаться).. Но так ведь Head это MDL - Так как можно напрямую изменять поля MDL ещё и присваивать ей какие-то адреса..?

    По идее нужно создать ндис буфер (MDL) и уже после этого присваивать p_ndis_packet->Private.Head значение этого буфера. Разве не так?

    ------------------------------------------
    разобрался. по видимому зполняется поле NDIS_PACKET.Reserved[] и в нём передаётся заголовок сообщения, а не MDL как мне показалось.
     
  8. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    на самом деле полный заголовок больше засчет преамбулы и SFD
    но они не передаются драйверу сетевым контроллером
    опционально может быть сохранен CRC, но он не входит в заголовок