基于WinPCap的Sniffer程序设计分析.ppt

处理离线数据包文件 WinPcap提供了大批函数,用于将网络数据保存到文 件和将储存文件读出。 文件格式和libpcap保存的是一样的。这种格式比较简 单,用二进制格式保存捕获的数据包的数据,它也是很 多网络工具例如WinDump,Ethereal和Snort等使用的标 准。 这里的函数包括pcap_dump_open()、pcap_dump()、 pcap_open_offline()等。 将数据包存入文件 //主程序 pcap_dumper_t * dumpfile; dumpfile = pcap_dump_open(adhandle, argv[1]); //打开一个存储文件并将它和接口联系起来 if(dumpfile==NULL){ ??????? fprintf(stderr,\nError opening output file\n);return -1; } //… pcap_loop(adhandle, 0, packet_handler, (unsigned char *)dumpfile); //packet_handler void packet_handler(u_char *dumpfile, const struct pcap_pkthdr *header, const u_char *pkt_data) { /* save the packet on the dump file */ ??? pcap_dump(dumpfile, header, pkt_data); } 从保存文件中读取数据包 while((res = pcap_next_ex( fp, header, pkt_data)) = 0){ ??????? //处理代码? }//主程序中 pcap_loop(fp, 0, dispatcher_handler, NULL);//主程序中 void dispatcher_handler(u_char *temp1, ??????????????????????? const struct pcap_pkthdr *header, const u_char *pkt_data) { //处理代码 } 第一步:打开离线数据文件 第二步:读取离线数据 (一)使用回调函数 (二)不使用回调函数 if ( (fp = pcap_open_offline(argv[1], errbuf) ) == NULL) { ??????? fprintf(stderr,\nError opening dump file\n);return -1; } 发送数据包 pcap_sendpacket发送单个数据包 发送队列(查看winpcap手册) pcap_sendpacket发送单个数据包 打开适配器后,调用pcap_sendpacket()函数 来发送一个手写的数据包。 pcap_sendpacket()用一个包含要发送的数据 的缓冲区、该缓冲区的长度和发送它的适配器作 为参数。注意该缓冲区是不经任何处理向外发出 的,这意味着,如果想发些有用的东西的话,应 用程序必须产生正确的协议头。 u_char packet[100]; if((fp = pcap_open_live(argv[1], 100, 1, 1000, error) ) == NULL) { fprintf(stderr,\nError opening adapter: %s\n, error); return; } /* Supposing to be on ethernet, set mac destination to 1:1:1:1:1:1 */ packet[0…5]=1; /* set mac source to 2:2:2:2:2:2 */ packet[6…11]=2; /* Fill the rest of the packet */ for(i=12;i100;i++){ packet[i]=i%256; } /* Send down the packet */ pcap_sendpacket ( fp, packet, 100); 获得网络流量统计数字 统计的内容: 最后一个时间间隔内的数据包的数目和接收 的比特数 为了用这个功能来监视网络,程序员

文档评论(0)

1亿VIP精品文档

相关文档