孙斌--防火墙实验包过滤防火墙实验

上传人:豆浆 文档编号:10658354 上传时间:2017-10-09 格式:DOCX 页数:14 大小:292.81KB
返回 下载 相关 举报
孙斌--防火墙实验包过滤防火墙实验_第1页
第1页 / 共14页
孙斌--防火墙实验包过滤防火墙实验_第2页
第2页 / 共14页
孙斌--防火墙实验包过滤防火墙实验_第3页
第3页 / 共14页
孙斌--防火墙实验包过滤防火墙实验_第4页
第4页 / 共14页
孙斌--防火墙实验包过滤防火墙实验_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《孙斌--防火墙实验包过滤防火墙实验》由会员分享,可在线阅读,更多相关《孙斌--防火墙实验包过滤防火墙实验(14页珍藏版)》请在金锄头文库上搜索。

1、实验五 基于包过滤技术的防火墙设计与实现(一)实验要求利用 WinpCap 嗅探器,通过抓取网络数据包,设计一个基于协议分析的包过滤防火墙系统。通过该实验使学生在掌握 WinPcap 开发包的基础上,掌握使用 WinpCap 编写网络应用程序的能力,深入理解包过滤防火墙的工作原理。(二)知识点提示主要知识点:1WinPcap 开发包;2网络应用程序开发。(三)实验内容开发出一个简单的 Windows 平台上的 Sniffer 工具,能显示所捕获的数据包并能做简单的分析或统计。主要内容:1. 列出检测主机的所有网卡,选择一个网卡,设置为混杂模式进行监听。a) WINPCAP 含有专用的函数,可以

2、检索本机的网卡设备:b) WINPCAP 含有专用的函数,可以选择本机网卡:2. 捕获多有流经网卡的数据包,并利用 WinPcap 函数库设置过滤规则。利用 WinPcap 函数库设计过滤规则,设计过滤器:3. 分析捕获到的数据包的包头和数据,按照各种协议的格式化显示。a) Ip 地址格式:b) Ip 数据包格式:c) Udp 数据包格式:d) Tcp 数据包格式:e) Icmp 数据包格式:4. 将所开发工具的捕获和分析结果与常用的 Sniffer 进行比较,完善程序代码。代码见附录(四)完成实验报告1、重点对 TCPUDPARPRARPIGMPICMP 等数据包进行分析2、所开发的嗅探工具

3、能够根据协议类型、端口、地址等信息对数据包进行过滤3、在实验报告中写出程序关键算法和流程图,根据 WinPcap 常用库函数总结出基于 WinPcap 的嗅探器的程序框架,并附上程序界面或运行结果。利用原有回调函数进行数据包捕获:a) 对 ICMP 数据包的嗅探:b) 对 Udp 数据包的嗅探:c) 对 Tcp 数据包的嗅探:(五)思考题1WinPcap 嗅探器的攻击机理如何?捕获原始数据包,包括在共享网络上各主机发送/接收的以及相互之间交换的数据包;在数据包发往应用程序之前,按照自定义的规则将某些特殊的数据包过滤掉;在网络上发送原始的数据包;收集网络通信过程中的统计信息。2WinPcap 主

4、要包括哪些模块,各模块的作用如何?Winpcap 是针对 Win32 平台上的抓包和网络分析的一个架构。它包括一个核心态的包过滤器,一个底层的动态链接库(packet.dll)和一个高层的不依赖于系统的库(wpcap.dll)。网络数据包过滤器(Netgroup Packet Filter,NPF)是 Winpcap 的核心部分,它是Winpcap 完成困难工作的组件。它处理网络上传输的数据包,并且对用户级提供可捕获(capture)、发送(injection)和分析性能(analysis capabilities)。NDIS(Network Driver Interface Specific

5、ation)是一个定义网络适配器(或者说成是管理网络适配器的驱动程序)与协议驱动(例如 TCP/IP 的实现)之间通信的规范。NDIS 最主要的目的是作为一个允许协议驱动发送和接收网络(LAN 或 WAN)上的数据包而不必关心特定的适配器或特定的 Win32 操作系统的封装。 3结合自己设计系统,画出 WinPcap 数据包捕获流程。附录:/ MyWincap.cpp : 定义控制台应用程序的入口点。/#include stdafx.h#include using namespace std;#define HAVE_REMOTE#include pcap.htypedef unsigned

6、char byte;typedef struct ip_addressip_address;/* IPv4 首部*/typedef struct ip_headerip_header;/* UDP 首部*/typedef struct udp_headerudp_header;/* TCP 首部*/typedef struct tcp_headertcp_header;/* ICMP 首部*/typedef struct icmp_headericmp_header;/* 回调函数原型*/void packet_handler(u_char *param, const struct pcap_

7、pkthdr *header, const u_char *pkt_data);void outputUDPMaeeage(udp_header *uh);void outputTCPMaeeage(tcp_header *th);void outputICMPMaeeage(icmp_header *icmh);int main()u_int netmask;struct bpf_program fcode;pcap_if_t *alldevs;pcap_if_t *d;pcap_t *adhandle;int i=0;char errbufPCAP_ERRBUF_SIZE;/* 获取本地机

8、器设备列表*/if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL /* auth is not needed */, &alldevs, errbuf) = -1)fprintf(stderr,Error in pcap_findalldevs_ex: %sn, errbuf);exit(1);/* 打印列表*/for(d= alldevs; d != NULL; d= d-next)coutname;i+;if (d-description)printf( (%s)n, d-description);elseprintf( (No descrip

9、tion available)n);if (i = 0)printf(nNo interfaces found! Make sure WinPcap is installed.n);return 0; /pcap_t*pcap_open( /const char *source,/指定的网卡的名称/ intsnaplen,/帧的长度/ intflags,/网卡捕获的模式/ intread_timeout,/超时/ struct pcap_rmtauth *auth, /是否要求认证/ char *errbuf/错误信息存储/ )for(d=alldevs, i=0; inext, i+);if

10、(adhandle=pcap_open( d-name,1500,PCAP_OPENFLAG_PROMISCUOUS,1000,NULL,errbuf)=NULL)fprintf(stderr,nUnable to open the adapter. %s is not supported by WinPcapn);/* 释放设备列表*/pcap_freealldevs(alldevs);return -1;/* 检查数据链路层,为了简单,我们只考虑以太网*/if(pcap_datalink(adhandle) != DLT_EN10MB)fprintf(stderr,nThis progra

11、m works only on Ethernet networks.n);/* 释放设备列表*/pcap_freealldevs(alldevs);return -1;if(d-addresses != NULL)/* 获得接口第一个地址的掩码*/netmask=(struct sockaddr_in *)(d-addresses-netmask)-sin_addr.S_un.S_addr;else/* 如果接口没有地址,那么我们假设一个C类的掩码*/netmask=0xffffff; int chosefilter;coutchosefilter;while(chosefilter3)cou

12、tchosefilter;string chose;switch(chosefilter)case 1:chose = ip and udp;break;case 2:chose = ip and tcp;break;case 3:chose = ip and icmp;break;/char packet_filter = chose;char packet_filter = ip and udp;/编译过滤器if (pcap_compile(adhandle, &fcode, packet_filter, 1, netmask) description);/* 释放设备列表*/pcap_f

13、reealldevs(alldevs);/* 开始捕捉*/pcap_loop(adhandle, 0, packet_handler, NULL);/* 不再需要设备列表了,释放它*/pcap_freealldevs(alldevs);system(pause);return 0; /* 回调函数,当收到每一个数据包时会被libpcap所调用*/void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)struct tm *ltime;char timestr16;ip

14、_header *ih;udp_header *uh;tcp_header *th;icmp_header *icmh;u_int ip_len;time_t local_tv_sec;/* 获得IP数据包头部的位置*/ih = (ip_header *) (pkt_data +14); /以太网头部长度/* 获得UDP首部的位置*/ip_len = (ih-ver_ihl & 0xf) * 4;coutts.tv_sec;ltime=localtime(&local_tv_sec);strftime( timestr, sizeof timestr, %H:%M:%S, ltime);/* 打印数据包的时间戳和长度*/printf(%s.%.6d len:%d , timestr, header-ts.tv_usec, header-len);coutproto)case 1:coutsaddr.byte1);coutsaddr.byte2);coutsaddr.byte3);coutsaddr.byte4);coutdaddr.byte1);coutdaddr.byte2);coutdaddr.byte3);coutdaddr.byte4);coutn;coutnn;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号