首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

编程抓以太网帧有关问题

2012-03-13 
编程抓以太网帧问题//帧头部结构struct Etheader{unsigned char destaddr[6]unsigned char sourceaddr[6]

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

热点排行