什么是c++中以太网ip中的eth_dr

What is eth_dr in ethernet ip in c++/C?

本文关键字:中的 eth dr ip 以太网 c++ 什么      更新时间:2023-10-16

我想在驱动程序模块中写一行代码,以获得对移动宽带的支持。这是代码:

   PUCHAR pCurrData;
   struct eth_hdr *pEthHeader = (struct eth_hdr*)pCurrData;
   NET_BUFFER_LIST_INFO(pNBL, NetBufferListFrameType) = (PVOID)(ULONG_PTR)pEthHeader->type;
    switch( pEthHeader->type ){
        case PP_HTONS(ETHTYPE_IP):
             NdisSetNblFlag(pNBL, 0x00000200 /*NDIS_NBL_FLAGS_IS_IPV4*/);
         break;
            }

所以我怀疑struct eth_hdr是什么?我包括哪个头文件?所以我应该把这个结构定义为我自己的?

在谷歌上搜索一点,就会从GitHub上的repo中返回这些精确的行。

在repo上使用GitHub搜索功能返回以下行:

/** Ethernet header */
struct eth_hdr {
#if ETH_PAD_SIZE
  PACK_STRUCT_FIELD(u8_t padding[ETH_PAD_SIZE]);
#endif
  PACK_STRUCT_FIELD(struct eth_addr dest);
  PACK_STRUCT_FIELD(struct eth_addr src);
  PACK_STRUCT_FIELD(u16_t type);
} PACK_STRUCT_STRUCT;
PACK_STRUCT_END
#ifdef PACK_STRUCT_USE_INCLUDES
#  include "arch/epstruct.h"
#endif

这似乎只描述了具有MAC Dest、MAC source和Ethertype的以太网帧的一部分。

您应该注意到,此代码是直接从bootkit(即Caberp)中提取的,该bootkit在内核网络驱动程序堆栈中注入了一个网络驱动程序。我不认为这类代码是一个很好的开始,可以了解如何制作NDIS驱动程序。

WDK上有足够好的NDIS驱动程序示例可供启动。