请教一个libpcap抓ip包tcp包的问题

ouyadi 2012-11-21 08:17:07
我需要做一个抓包器,代码如下,我的主机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);

}
...全文
81 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧