Я в ловлю сырые пакеты. Мне нужно выводить информацию, типа mac адрес и т.п. Вот для этого собственно необходимо знать как выглядит заголовок ethernet пакета. В ДДК искал, так и не нашёл; в СДК есть какие-то структуры, но видать тоже не то... хотелось бы увидеть его описание.
первая ссылка гугла выводит на страничку с описанием езернет-фрейма.. как я помню: typedef UCHAR MAC_ADDRESS[6]; #pragma pack(1) struct EthFrame { MAC_ADDRESS Destination; MAC_ADDRESS Source; USHORT Type; }; ща если порою найду структурку из работающего драйвера-фильтра NDIS, который я когдато писал и примерный кодес анализа
да, я оказался прав. нашел у себя в сорце: Код (Text): // Ethernet protocols #define ETHERNET_PROTOCOL_IP 0x0800 #define ETHERNET_PROTOCOL_ARP 0x0806 .. #pragma pack(1) // MAC Address typedef UCHAR MAC_ADDRESS[6]; // Ethernet header struct ETHERNET_HDR { MAC_ADDRESS Destination; MAC_ADDRESS Source; USHORT Protocol; };
Хех.. видел я эту структуру, просто не думал что заголовок всего 14 байт... думал там ещё куча всего помимо MAC адресов. Так... Я перевожу карточку в неразборчивый режим, но ведь при закрытии адаптера, по идее нужно перевести её обратно... что-то я не видел в примерах этого... или в этом нет необходимости?
Непонятен кусок кода: 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 как мне показалось.
на самом деле полный заголовок больше засчет преамбулы и SFD но они не передаются драйверу сетевым контроллером опционально может быть сохранен CRC, но он не входит в заголовок