您的位置:首页 > 其它

libpcap

2015-11-02 13:31 162 查看
调用过程

---------------------------------------------------------------------------------------------

char * device; /* 用来捕获数据包的网络接口的名称 */

pcap_t * p; /* 捕获数据包句柄,最重要的数据结构 */

struct bpf_program fcode; /* BPF 过滤代码结构 */

  

/* 第一步:查找可以捕获数据包的设备 */

device = pcap_lookupdev(errbuf);

  

/* 第二步:创建捕获句柄,准备进行捕获 */

p = pcap_open_live(device, 8000, 1, 500, errbuf);

 

/* 第三步:如果用户设置了过滤条件,则编译和安装过滤代码 */

pcap_compile(p, &fcode, filter_string, 0, netmask);

pcap_setfilter(p, &fcode);

  

/* 第四步:进入(死)循环,反复捕获数据包 */

for( ; ; )

{

  while((ptr = (char *)(pcap_next(p, &hdr))) == NULL);

  

  /* 第五步:对捕获的数据进行类型转换,转化成以太数据包类型 */

  eth = (struct libnet_ethernet_hdr *)ptr;

  

  /* 第六步:对以太头部进行分析,判断所包含的数据包类型,做进一步的处理 */

  if(eth->ether_type == ntohs(ETHERTYPE_IP))

  …………

  if(eth->ether_type == ntohs(ETHERTYPE_ARP))

  …………

}

  

/* 最后一步:关闭捕获句柄,一个简单技巧是在程序初始化时增加信号处理函数,

以便在程序退出前执行本条代码 */

pcap_close(p);

---------------------------------------------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: