当前位置:编程学习 > 网站相关 >>

libpcap抓包ip地址不对?请帮我看看代码

我需要做一个抓包器,代码如下,我的主机ip地址是192.168.1.110,可是结果却是
sudo ./sniffall 0
157.55.56.161  192.168.1.105
192.168.1.105  157.55.56.161
157.55.56.161  192.168.1.105
192.168.1.105  157.55.56.161
157.55.56.161  192.168.1.105

这个不对吧?之前我尝试过用netinet/ip.h和netinet/ether.h下面的struct ip和struct ether来算offset,可是结果的ip更奇怪了,大家看看是哪里出了问题,谢谢!


#include <pcap.h>
#include <stdio.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <arpa/inet.h>
//#include <netinet/ip.h>
//#include <netinet/if_ether.h>
//#include <netinet/ether.h>

struct ether_header
{
  u_int8_t ether_dhost[6];
  u_int8_t ether_shost[6];
  u_int16_t ether_type;
};

typedef u_int32_t in_addr_t;

struct ip_header
{
#ifdef WORDS_BIGENDIAN
  u_int8_t ip_version:4;
  u_int8_t ip_header_length:4;
#else
  u_int8_t ip_header_length:4;
  u_int8_t ip_version:4;
#endif
  u_int8_t ip_tos;
  u_int16_t ip_length;
  u_int16_t ip_id;
  u_int16_t ip_off;
  u_int8_t ip_ttl;
  u_int8_t ip_protocol;
  u_int16_t ip_checksum;
  struct in_addr ip_source_address;
  struct in_addr ip_destination_address;
};


void getPacket(u_char *args, const struct pcap_pkthdr *pkthdr, const u_char *packet){
    struct ip_header *ip;
    ip = (struct ip_header*)(packet+sizeof(struct ether_header));
    char* src = inet_ntoa(ip->ip_source_address);
    printf("%s ",src);
    char* dst = inet_ntoa(ip->ip_destination_address);
    printf(" %s\n", dst);
    
}
补充:云计算 ,  云安全
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,