使用libpcap库用c编写网络嗅探器

定义:网络嗅探也叫网络侦听,指的是使用特定的网络协议来分解捕获到的数据包,并根据对应的网络协议识别对应数据片断

作用:管理员可以用来监听网络的流量情况 

          开发网络应用的程序员可以监视程序的网络情况 

          黑客可以用来刺探网络情报

 

网卡的四种接收数据模式

①广播模式:该模式下的网卡能够接收网络中的广播信息;

②组播模式:设置在该模式下的网卡能够接收组播数据;

③直接模式:在这种模式下,只有目的网卡才能接收该数据;

④混杂模式:在这种模式下的网卡能够接收一切通过它的数据,而不管该数据是否是传给它的。

通常,网卡的缺省配置是支持前三种模式。 为了监听网络上的流量,必须设置为混杂模式

 

libpcap简介

Packet Capture library,即数据包捕获函数库。该库提供的C函数接口可用于需要捕获经过网络接口(只要经过该接口,目标地址不一定为本机)数据包的系统开发上。

 

 

程序流程

 

Libpcap API介绍

pcap_lookupdev( )

char *pcap_lookupdev(char *errbuf)

          用于返回可被pcap_open_live()或pcap_lookupnet()函数调用的网络

          设备名指针。如果函数出错,则返回NULL,同时errbuf中存放相关的

          错误消息。

pcap_lookupnet( )

int pcap_lookupnet(char *device, bpf_u_int32 *netp,bpf_u_int32 *maskp, char *errbuf)

          获得指定网络设备的网络号和掩码。netp参数和maskp参数都是

          bpf_u_int32指针。如果函数出错,则返回-1,同时errbuf中存放相

          关的错误消息。

pcap_open_live( ) 

pcap_t *pcap_open_live(char *device, int snaplen,

               int promisc, int to_ms, char *ebuf)

          获得用于捕获网络数据包的数据包捕获描述字。device参数为指定打开

          的网络设备名。snaplen参数定义捕获数据的最大字节数。promisc指定

          是否将网络接口置于混杂模式。to_ms参数指定超时时间(毫秒)。

          ebuf参数则仅在pcap_open_live()函数出错返回NULL时用于传递错误消

          息。

pcap_setfilter( ) 

int pcap_setfilter(pcap_t *p, struct bpf_program *fp)

          指定一个过滤程序。fp参数是bpf_program结构指针,通常取自

          pcap_compile()函数调用。出错时返回-1;成功时返回0。

pcap_compile( ) 

int pcap_compile(pcap_t *p, struct bpf_program *fp,

               char *str, int optimize, bpf_u_int32 netmask)

          将str参数指定的字符串编译到过滤程序中。fp是一个bpf_program结

          构的指针,在pcap_compile()函数中被赋值。optimize参数控制结果

          代码的优化。netmask参数指定本地网络的网络掩码。

pcap_next( ) 

u_char *pcap_next(pcap_t *p, struct pcap_pkthdr *h)

          返回指向下一个数据包的u_char指针。

pcap_dispatch( )

int pcap_dispatch(pcap_t *p, int cnt,

               pcap_handler callback, u_char *us

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值