CSDN草稿出问题了。读到别人的草稿了。
2010-08-10 00:07
190 查看
使用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 srcip[4];定义为字符数组能正确输出
u_int8_t dstmac[6];
struct in_addr dstip;//u_int8_t dstip[4];
}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类型字段不能放在结构体中间,放在最后可以,但不知道具
体原因。
PS:
2010-08-09 补充
这是由于定义结构体时,字节对齐问题。
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 srcip[4];定义为字符数组能正确输出
u_int8_t dstmac[6];
struct in_addr dstip;//u_int8_t dstip[4];
}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类型字段不能放在结构体中间,放在最后可以,但不知道具
体原因。
PS:
2010-08-09 补充
这是由于定义结构体时,字节对齐问题。
相关文章推荐
- CSDN草稿出问题了。读到别人的草稿了。
- CSDN草稿出问题了。读到别人的草稿了。
- 在csdn上回答别人关于VBSCRIPT中取随机数的问题(BS楼主,不结贴给分)
- 自己看别人看没用-调试断点问题
- [小技巧] 解决CSDN博客 类别管理/文章分类 批量移动管理问题
- CSDN如何转载别人的文章
- 难道是CSDN的数据库出问题了?
- 解决CSDN博客插入代码出现<pre></pre>的问题
- 源程序由本机移植到别人机器数据库不正常的问题解决
- blog.csdn.net对W3C CSS支持的问题
- 关于csdn_markdown图片大小不适应问题
- 导入别人项目报错的问题
- CSDN的Blog中的公式显示问题
- web程序安全问题、防止别人拷走
- CSDN如何转载别人的文章
- csdn这个问题太严重了吧
- OpenCV不能打开avi的问题,别人的电脑可以打开,库也一模一样,你的却无法打开——你的系统的解码有问题
- 关于跳转到空白页面进行新浪微博分享,当点击取消保存到草稿时无法监听,返回空白页问题的解决方案
- 新手学习别人源码需注意的问题