好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

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

14页
  • 卖家[上传人]:豆浆
  • 文档编号:10658354
  • 上传时间:2017-10-09
  • 文档格式:DOCX
  • 文档大小:292.81KB
  • / 14 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 实验五 基于包过滤技术的防火墙设计与实现(一)实验要求利用 WinpCap 嗅探器,通过抓取网络数据包,设计一个基于协议分析的包过滤防火墙系统通过该实验使学生在掌握 WinPcap 开发包的基础上,掌握使用 WinpCap 编写网络应用程序的能力,深入理解包过滤防火墙的工作原理二)知识点提示主要知识点:1.WinPcap 开发包;2.网络应用程序开发三)实验内容开发出一个简单的 Windows 平台上的 Sniffer 工具,能显示所捕获的数据包并能做简单的分析或统计主要内容:1. 列出检测主机的所有网卡,选择一个网卡,设置为混杂模式进行监听a) WINPCAP 含有专用的函数,可以检索本机的网卡设备:b) WINPCAP 含有专用的函数,可以选择本机网卡:2. 捕获多有流经网卡的数据包,并利用 WinPcap 函数库设置过滤规则利用 WinPcap 函数库设计过滤规则,设计过滤器:3. 分析捕获到的数据包的包头和数据,按照各种协议的格式化显示a) Ip 地址格式:b) Ip 数据包格式:c) Udp 数据包格式:d) Tcp 数据包格式:e) Icmp 数据包格式:4. 将所开发工具的捕获和分析结果与常用的 Sniffer 进行比较,完善程序代码。

      代码见附录(四)完成实验报告1、重点对 TCP\UDP\ARP\RARP\IGMP\ICMP 等数据包进行分析2、所开发的嗅探工具能够根据协议类型、端口、地址等信息对数据包进行过滤3、在实验报告中写出程序关键算法和流程图,根据 WinPcap 常用库函数总结出基于 WinPcap 的嗅探器的程序框架,并附上程序界面或运行结果利用原有回调函数进行数据包捕获:a) 对 ICMP 数据包的嗅探:b) 对 Udp 数据包的嗅探:c) 对 Tcp 数据包的嗅探:(五)思考题1.WinPcap 嗅探器的攻击机理如何?捕获原始数据包,包括在共享网络上各主机发送/接收的以及相互之间交换的数据包;在数据包发往应用程序之前,按照自定义的规则将某些特殊的数据包过滤掉;在网络上发送原始的数据包;收集网络通信过程中的统计信息2.WinPcap 主要包括哪些模块,各模块的作用如何?Winpcap 是针对 Win32 平台上的抓包和网络分析的一个架构它包括一个核心态的包过滤器,一个底层的动态链接库(packet.dll)和一个高层的不依赖于系统的库(wpcap.dll)网络数据包过滤器(Netgroup Packet Filter,NPF)是 Winpcap 的核心部分,它是Winpcap 完成困难工作的组件。

      它处理网络上传输的数据包,并且对用户级提供可捕获(capture)、发送(injection)和分析性能(analysis capabilities)NDIS(Network Driver Interface Specification)是一个定义网络适配器(或者说成是管理网络适配器的驱动程序)与协议驱动(例如 TCP/IP 的实现)之间通信的规范NDIS 最主要的目的是作为一个允许协议驱动发送和接收网络(LAN 或 WAN)上的数据包而不必关心特定的适配器或特定的 Win32 操作系统的封装 3.结合自己设计系统,画出 WinPcap 数据包捕获流程附录:// MyWincap.cpp : 定义控制台应用程序的入口点//#include "stdafx.h"#include using namespace std;#define HAVE_REMOTE#include "pcap.h"typedef unsigned char byte;typedef struct ip_address{}ip_address;/* IPv4 首部*/typedef struct ip_header{}ip_header;/* UDP 首部*/typedef struct udp_header{}udp_header;/* TCP 首部*/typedef struct tcp_header{}tcp_header;/* ICMP 首部*/typedef struct icmp_header{}icmp_header;/* 回调函数原型*/void packet_handler(u_char *param, const struct pcap_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 errbuf[PCAP_ERRBUF_SIZE];/* 获取本地机器设备列表*/if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL /* auth is not needed */, &alldevs, errbuf) == -1){fprintf(stderr,"Error in pcap_findalldevs_ex: %s\n", errbuf);exit(1);}/* 打印列表*/for(d= alldevs; d != NULL; d= d->next){coutname;i++;if (d->description)printf(" (%s)\n", d->description);elseprintf(" (No description 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((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 WinPcap\n");/* 释放设备列表*/pcap_freealldevs(alldevs);return -1;}/* 检查数据链路层,为了简单,我们只考虑以太网*/if(pcap_datalink(adhandle) != DLT_EN10MB){fprintf(stderr,"\nThis program 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;cout>chosefilter;while(chosefilter3){cout>chosefilter;}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_freealldevs(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 timestr[16];ip_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);cout<<"\n";cout<<"\n\n";}。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.