zoukankan      html  css  js  c++  java
  • CSDN草稿出问题了。读到别人的草稿了。

    使用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 补充

    这是由于定义结构体时,字节对齐问题。

  • 相关阅读:
    mtu
    OC2_使用系统协议
    OC1_协议语句
    Json文件/网址解析
    文件归档
    Plist文件
    NS-Date/NSDateFormatter
    OC10_文件练习
    OC9_文件操作
    OC8_NSData
  • 原文地址:https://www.cnblogs.com/xqf222/p/3306809.html
Copyright © 2011-2022 走看看