利用libpcap分析网络上的数据包(入门级)

本文介绍了如何使用libpcap在局域网中抓取并分析数据包,包括以太网、IP和TCP头部信息。通过示例代码展示了libpcap的回调函数和数据包解析过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文可任意转载,但请保留作者及出处
作者:rainfish
出处:http://blog.youkuaiyun.com/bat603/
经过几天的突击,终于明白了怎样在局域网内抓包,这可是我多年来的梦想。首先说说我的学习过程,一开始从网上搜索了关于sniffer大量资料,大致学会了,可是仔细分析结果发现,都是本机上的数据包,而不是整个局域网的。于是又查资料,在 linuxsir上有高人指点,说,现在局域网内都是交换机联接,而不是以前的Hub所以,如果要抓整个局域网的数据包,必须用libpcap,于是又查了许多关于Libpcap的资料,经过一天的努力,总算稍微有点眉目了。总结手里的资料,它们都在讲怎样用libpcap抓包,而没有讲怎样去分析包,所以在下就写了一个小小的例子,去分析数据包里的具体信息,如果有不正确的地方,敬请指正。
关于libpcap的使用方法,请参考我收集的的资料
http://blog.youkuaiyun.com/bat603/archive/2006/09/04/1175729.aspx
http://blog.youkuaiyun.com/bat603/archive/2006/09/04/1176251.aspx
下边这个比较深奥
http://blog.youkuaiyun.com/bat603/archive/2006/09/04/1175271.aspx

源代码及解释
/**************************************************************
********************rainfish**********************************
***************http://blog.youkuaiyun.com/bat603/**********************
**********本文可任意转载,但请保留作者及出处*****************/

//该程序使用方法:./exe_your_file  numpacket
#include <stdio.h>
#include <pcap.h>
/* if this gives you an error try pcap/pcap.h 里面有相应的数据结构一般在/usr/include/中*/

#include <stdlib.h>
#include <errno.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netinet/if_ether.h>
#include <linux/ip.h>
#include <linux/tcp.h>//注意使用的ip、tcp数据结构,至于它们和 <netinet/ip.h | tcp.h>的区别,我也弄不清楚。

/*回调函数 ,int pcap_loop(pcap_t *p, int cnt,
          pcap_handler callback, u_char *user)调用的
这里需要说明的是,关于参数 pkthdr、packet的说明,好多资料都没有进行解释,在这里我只能尝试的去解释
当执行pcap_loop,会自动调用回调函数,
pcap_t *p是调用者传递的,参看下面例子,而pkthdr( libpcap 自定义数据包头部 ),packet(捕获的书据包)就会相应得到,而不用用户操作。下面的例子也能证明这一点。我实在不敢确定,因为没有找到相应的文档
*/
vo
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值