读书人

编程抓以太网帧有关问题

发布时间: 2012-03-13 11:21:12 作者: rapoo

编程抓以太网帧问题
//帧头部结构
struct Etheader
{
unsigned char destaddr[6];
unsigned char sourceaddr[6];
unsigned short type;
};
//帧分析
struct Etheader* etherh;
etherh=(struct ether_header*)buffer;
printf("%02x:%02x:%02x:%02x:%02x:%02x==>"
"%02x:%02x:%02x:%02x:%02x:%02x\n",
etherh->sourceaddr[0], etherh->sourceaddr[1],
etherh->sourceaddr[2], etherh->sourceaddr[3],
etherh->sourceaddr[4], etherh->sourceaddr[5],
etherh->destaddr[0], etherh->destaddr[1],
etherh->destaddr[2], etherh->destaddr[3],
etherh->destaddr[4], etherh->destaddr[5]);
printf("%x\n",etherh->type);
if(etherh->type==0x0800) printf("!\n");
已经能获取到数据帧了,源,目的都能准确输出。就是不明白,为什么协议类型字段输出8.unsigned short不是2字节吗?为什么输出值能输出0800的高字节?

[解决办法]

探讨

是不是要ntohs呢?貌似这回编程800了。想问下,就是什么时候使用ntohs呢?什么时候不用呢?还有如果我要测试ARP包,怎么测试?

[解决办法]
探讨
是不是要ntohs呢?貌似这回编程800了。想问下,就是什么时候使用ntohs呢?什么时候不用呢?还有如果我要测试ARP包,怎么测试?

[解决办法]
对于一个类型占用多个字节的需要调用ntohs等函数。如果该类型只占用了一个字节,那么大端字节序和小端字节序都没有什么区别的。

读书人网 >C语言

热点推荐