当前位置:编程学习 > 网站相关 >>

关于struct in_addr类型字段在结构体中位置?

大家好。
我现在在使用WinPcap抓取ARP数据包,其中定义ARP数据包结构体如下:
typedef struct ArpPacket
{
u_int16_t macaddrtype;
u_int16_t proaddrtype;
u_int8_t  macaddrlen;
u_int8_t  proaddrlen;
u_int16_t operationtype;
u_int8_t  srcmac[6];
struct in_addr srcip;//     
u_int8_t  dstmac[6];
struct in_addr dstip;//
}AP;

在源程序中读取协议字段内容
p=parp->srcmac;
printf("源MAC:%02x:%02x:%02x:%02x:%02x:%02x\n",p[0],p[1],p[2],p[3],p[4],p[5]);
p=parp->dstmac;
printf("源ip:%s\n",inet_ntoa(parp->srcip));// 出错
printf("目的MAC:%02x:%02x:%02x:%02x:%02x:%02x\n",p[0],p[1],p[2],p[3],p[4],p[5]);
printf("目的ip:%s\n",inet_ntoa(parp->dstip));//出错

结果:源MAC地址能正确输出,但输出源IP地址时,跳过2个字节,输出后面4个字节内容;后

面目的MAC地址输出往后6个字节,输出目的IP时,又跳过2个字节,输出后面4个字节!

但当把源IP定义为"u_int8_t  srcip[4];"时就能正确输出;

还有,IP数据包首部最后两个字段为源IP和目的IP,都定义为struct in_addr类型,可以正确

输出IP地址;我将ARP数据包的两个IP地址字段移到ARP数据包结构体最后2个字段,也能正确

输出!

我现在的想法是:struct in_addr类型字段不能放在结构体中间,放在最后可以,但不知道具

体原因。

--------------------编程问答-------------------- 传说中的内存对齐
补充:云计算 ,  云安全
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,