gpt4 book ai didi

network-programming - 如何访问 mBlk 以太网包中的 header 和数据信息?特别是我想提取发件人IP

转载 作者:行者123 更新时间:2023-12-02 16:36:10 25 4
gpt4 key购买 nike

到目前为止,我对实现这一目标的理解是使用 NET_FUNCS:

typedef struct net_funcs{
STATUS (*start) (void*); /* driver’s start func */
STATUS (*stop) (void*); /* driver’s stop func */
STATUS (*unload) (void*); /* driver’s unload func */
int (*ioctl) (void*, int, caddr_t); /* driver’s ioctl func */
STATUS (*send) (void* , M_BLK_ID); /* driver’s send func */
STATUS (*mCastAddrAdd) (void*, char*); /* driver’s mcast add func */
STATUS (*mCastAddrDel) (void*, char*); /* driver’s mcast delete func */
STATUS (*mCastAddrGet) (void*, MULTI_TABLE*);/* driver’s mcast get func */
STATUS (*pollSend) (void*, M_BLK_ID); /* driver’s poll send func */
STATUS (*pollRcv) (void*, M_BLK_ID); /* driver’s poll receive func */
STATUS (*addressForm) (M_BLK_ID, M_BLK_ID, M_BLK_ID);/* driver’s addr formation func */
STATUS (*packetDataGet) (M_BLK_ID, M_BLK_ID);/* driver’s pkt data get func */
STATUS (*addrGet) (M_BLK_ID, M_BLK_ID, M_BLK_ID, M_BLK_ID, M_BLK_ID);/* driver’s pkt addr get func */} NET_FUNCS;

我有一个指向名为 pMblk(类型为 M_BLK_ID = * M_BLK)的 M_BLK 结构的指针,我相信它保存了我们以太网包( header 和数据)的信息,这是我的理解开始消失的地方,我不是100% 确定这是我们整个包裹的存储位置,或者只是整个(集群)的一部分。特别是使用 adderGet(使用相同的函数,但对于我们的例子是 endEtherPacketAddrGet),我理解这个函数的方式是,如果你把你的结构和数据包中的所有信息放入参数 1,然后是其他指针,我创建了参数 2 : pSrc, param 3: pDest, param 4: pESrc, param 5: pEDst,我觉得发件人 IP 地址的信息应该在 pSrc 结构的某个地方。这是我真正努力打印出此对象中的信息作为日志消息的地方,现在我只想打印出发件人 IP 地址,稍后再打印更多信息,但我无法打印出任何连贯的东西。我试过:

printf("pSrc->mData: %d", pSrc->mData); // not actually using print just for the sake of the example
printf("pSrc->mData: %c", pSrc->mData); // not actually using print just for the sake of the example

产生空白或无用的数据,还有:

printf("pSrc->mData: %d", &pSrc->mData); // not actually using print just for the sake of the example
printf("pSrc->mData: %c", &pSrc->mData); // not actually using print just for the sake of the example

这些并不是我尝试过的唯一方法,我只是想表达一下我现在的位置和我正在尝试做的事情,也就是说我有一个基本的理解,因为我觉得好像我很接近?是否有不同的方法来获取此信息,或者它是否存储在结构的不同成员中?对此的任何指导将不胜感激!

最佳答案

这些 C 代码片段会很有帮助。

unsigned char    *mData = (unsigned char *)(pMblk->mBlkHdr.mData);
IP_HEADER_T *pkt_iph = (IP_HEADER_T *)&mData[14]; /* ethernet packet only */
unsigned int src_ip_addr = pkt_iph->src;
unsigned int dst_ip_addr = pkt_iph->dst;

关于network-programming - 如何访问 mBlk 以太网包中的 header 和数据信息?特别是我想提取发件人IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62698183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com