typedef struct pcap_addr pcap_addr_t;
 
struct pcap_addr {
    struct pcap_addr *next;    /*指向下一个元素的指针*/
    struct sockaddr *addr;      /* IP地址 */
    struct sockaddr *netmask;   /* 网络掩码 */
    struct sockaddr *broadaddr; /* 广播地址 */
    struct sockaddr *dstaddr;   /* P2P目的地址*/
};
按照定义,IP地址应该是存放在 addr为指针的结构体内,奇怪的是在我的机器调试发现,通过pcap_findalldevs(&m_t_all_pdevs,m_t_errbuf)获取网卡列表后,IP地址全部存放在next->addr里,而addr里存放IP的位置全是0,网上有解释说,之所以存在next指针,是因为同一块网卡可以绑定多个IP,但是我的机器又没有经过特殊配置,个人觉着默认的话,IP也应该在addr里。
IP地址全部出现在next->addr,求解释。
上图:

解决方案 »

  1.   

    我没有举荐过这种情况  是不是你没有获取IP啊 IP没有获取到 当然里面就为空拉期待接分 
    我第一个啊!
      

  2.   

    从next里面可以得到和使用ipconfig -all 列出的一样的IP
    没有获取IP怎么理解?单纯执行pcap_findalldevs(&m_t_all_pdevs,m_t_errbuf)这个函数,在m_t_all_pdevs里没有IP信息么?是需要再执行一个函数,才能使IP出现在addr里面么?应该不会是这样吧~
      

  3.   

    那个next->addr里面的sa_data[2][3][4][5]出现乱码也许是因为定义的关系
    struct sockaddr {
    unsigned  short  sa_family;     /* address family, AF_xxx */
    char  sa_data[14];                 /* 14 bytes of protocol address */
    };
    正常转换后得到的是192.168.1.1
      

  4.   

    用pcap_findalldevs_ex这个函数获取到的就是有关的网卡信息了,然后再pcap_addr里面就是IP地址的信息啦……的确是一个链表的,你可以在本地连接的TCP/IP那里面添加一个IP试试看,就可以看到pcap_addr里面有多个IP地址了