编程抓以太网帧问题
//帧头部结构
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等函数。如果该类型只占用了一个字节,那么大端字节序和小端字节序都没有什么区别的。