




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、广州大学学生实验报告开课学院及实验室: 计算机学院 2015年月12日15日学院计算机科学与技术教育学院年级、专业、班姓名学号实验课程名称计算机网络实验成绩实验项目名称实验五:网络程序设计指导老师一、实验目的初步掌握网络监听与分析技术的实现方法,从而加深对网络协议的理解。了解以太网的帧格式,认识TCP/IP的层次结构。二、实验环境1、安装了TCP/IP协议的Windows系统的计算机2、VC+6.0开发环境三、实验原理在分层模型中,主要利用数据封装来实现不同系统间的通信,在发送数据经过时,每经过一层就会被增加上本层的头部信息。本实验要分析数据包,就一层一层的分析这些头部信息。本实验用WinPc
2、ap进行捕获数据包,它工作在底层。以太网中传输的数据被称为“帧”,帧的格式如下:长度(类型)帧前定界符前导码帧校验数据源地址目的地址 对于前导码和帧前定界符通常有硬件处理,在分析数据包时不予考虑。当捕获到一个以太网数据帧的时候,数据就开始从协议栈由底向上逐层解析,去掉各层所加上的报文协议头部:1 / 9图1:帧格式WinPcap是一个开源的、运行于Win32平台的体系结构,是用于网络封包抓取的一套工具,包括一个内核级别的packet filter,一个底层的DLL(packet.dll)和一个高级的独立于系统的DLL(Wpcap.dll), packet.dll提供一个底层的API,可以直接访
3、问网络设备驱动,Wpcap.dll是一个强大的捕获程序库。它为win32应用程序提供访问网络底层的能力,Winpcap不能阻塞、过滤或控制其他应用程序数据报的发收,它仅仅只是监听共享网络上传送的数据包。本实验利用WinPcap提供的函数来设置网卡模式并捕获响应的数据包,进行解析。四、实验内容及步骤步骤(1):安装WinPcap驱动和DLL程序。在VC+中配置WinPcap,Tools->options->Directories,添加WinPcap的Include和Lib文件。如下:图2:添加WinPcap库步骤(2):新建MFCAppwizard(exe)工程,在打开的工程下,选择
4、Project->Settings的C/C+选项卡,选择Link选项卡,在Object/library modules中添加wpcap.lib 、ws2_32.lib和packet.lib三个库文件(三者之间用空格隔开),使工程在编译连接的时候将WinPcap的响应的库模块加载进去。步骤(3):在Microsoft Visual C+6.0环境下设计界面,界面如下:图3:界面设计View->ClassWizard定义控件变量。步骤(4):在CapturePacket1Dialog.h添加头文件,把相应的库文件添加到工程里。#include<winsock2.h>#inc
5、lude "pcap.h"#include "remote-ext.h"步骤(5):在OnInitDialog()中添加初始化界面的代码。获取控件的句柄,对窗口进行设计,如:对Listbox的初始化:/初始化Listbox:DWORD dwStyle;dwStyle = m_list.GetStyle();/列表类型dwStyle |= LVS_EX_GRIDLINES |LVS_EX_FULLROWSELECT |LVS_SHOWSELALWAYS ; /绘制表格 选择整行m_list.SetExtendedStyle(dwStyle);/扩展类型 m
6、_list.InsertColumn(0,"时间");/插入一列: m_list.SetColumnWidth(0,80);/下面可以根据自己的需要插入列步骤(6):定义相关的结构体typedef struct ip_addressu_char byte1;u_char byte2;u_char byte3;u_char byte4;ip_address;/* IPv4 header */typedef struct ip_headeru_char ver_ihl; / Version (4 bits) + Internet header length (4 bits)u_
7、char tos; / Type of service u_short tlen; / Total length u_short identification; / Identificationu_short flags_fo; / Flags (3 bits) + Fragment offset (13 bits)u_char ttl; / Time to liveu_char proto; / Protocolu_short crc; / Header checksumip_address saddr; / Source addressip_address daddr; / Destina
8、tion addressu_int op_pad; / Option + Paddingip_header;typedef struct udp_headeru_short sport; / Source portu_short dport; / Destination portu_short len; / Datagram lengthu_short crc; / Checksumudp_header;/mac头部结构typedef struct BYTE DesMacAddr6;BYTE SrcMacAddr6;WORD LengthOrType;/数据长度或类型MAC_HEADER;/M
9、AC帧类型定义const u_short MAC_TYPE_IP=0x0800;const u_short MAC_TYPE_ARP=0x0806;const u_short MAC_TYPE_RARP=0x08035;步骤(7):在OnInitDialog()获取网络设备列表,调用函数原型如下int pcap_findalldevs_ex(char *source,struct pcap_rmthauth auth,pcap_if_t * *addevs,char * errbuf)alldevs参数指向获取的网络接口列表的第一个元素,网络接口链表中每一个元素都是pcap_if_t结构,在p
10、cap.h中都已经定义。本程序实现的具体代码如下:在获得了网络设备列表后,下一步就要获取网络接口卡的IP地址、MAC地址、网络掩码、广播地址。获取Ip地址的具体实现代码如下(仅供参考):for( i = 0; pHost!= NULL && pHost->h_addr_listi!= NULL; i+ ) char str100; char addr20;LPCSTR psz=inet_ntoa (*(struct in_addr *)pHost->h_addr_listi);str3="IP地址是:"str3=str3+psz;m_list3.
11、InsertItem(m_list3.GetItemCount(),str3);/加入列表项图4:获取网络适配器窗口步骤(8):双击“捕获”按钮,构造函数,在此过程中要打开网络接口,为了捕获到网络经过某网络接口设备的所有数据包,所以把网卡设置为混杂模式。调用函数pcap_open()(此函数可以在MSDN中查找此函数的具体使用方法)(仅供参考) pcap_if_t * d;pcap_t * adhandle;/* Open the device */ if ( (adhandle= pcap_open(d->name, / 设备名 65536, PCAP_OPENFLAG_PROMISC
12、UOUS, / 混杂模式 1000, / 超时时间 NULL;/在远程设备中捕获数据包时使用,在本实验中不适用,设置为NULL errbuf / error buffer ) ) = NULL)打开网络适配器后,下一步就是编辑和设置过滤器,可以根据自己的需要选择性的捕获网络数据包。本实验选择IP协议,定义char packet_filter=”ip”;if(pcap_compile(adhandle, &fcode, packet_filter, 1, netmask)<0) /add your code pcap_freealldevs(alldevs);/set the fi
13、lter 设置过滤器if(pcap_setfilter(adhandle, &fcode)<0) add your code;pcap_freealldevs(alldevs);步骤(9):前期工作做完,就开始获取数据包,在本实验中通过创建线程来实现抓包的过程,实现代码(仅供参考):/* start the capture 抓包线程*/DWORD nThreadId=0; handle=(HANDLE):CreateThread(NULL,0,mythread,(LPVOID)this,CREATE_SUSPENDED,&nThreadId );SetThreadPrio
14、rity(handle,THREAD_PRIORITY_NORMAL);ResumeThread(handle);其中mythread为在CapturePacket1Dlg.cpp自定义的线程名称DWORD WINAPI mythread(LPVOID lParam)CWinpcapdialogDlg *p=(CWinpcapdialogDlg*)lParam;time_t local_tv_sec;struct tm *ltime;char timestr16;ip_header *ih;udp_header *uh;u_int ip_len;步骤(10):在mythread()中分析捕获的
15、数据包,实现代码(仅供参考,有省略):while(res=pcap_next_ex(p->adhandle,&p->header,&p->pkt_data)>=0) if(res=0)continue;else/处理捕获的包local_tv_sec = p->header->ts.tv_sec;ltime=localtime(&local_tv_sec);strftime( timestr, sizeof timestr, "%H:%M:%S", ltime); /获取时间ih = (ip_header *) (p->pkt_data +14); /ih指向IP报文的首部ip_len = (ih->ver_ihl & 0xf) * 4; uh = (udp_header *) (u_char*)ih + ip_len); / uh指向UDP报文的首部sport=ntohs(uh->sport); /网络序转化为主机序dport=nto
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学年第一学期幼儿教学工作总结模版
- 创先争优个人学习心得体会模版
- 新生儿单纯疱疹病毒感染的临床护理
- 社保委托代表协议
- 重力教学设计
- 上学期八年级语文教学工作总结模版
- 某精密模具有限公司品质管理系统
- 猫咪输液护理常规
- 部编本大小多少教学设计
- 7S管理培训体系精要
- 奥沙利铂过敏反应
- 项目部临时动火作业审批表
- 机载直流用电设备电源特性要求及试验方法
- 项目质量管理评价表
- 饮料生产公司应急预案汇编参考范本
- 养老院老人入(出)院流程图
- 最新-临时救助申请审核审批表模板
- 蓝色大气商务商业计划书PPT模板
- 青春红绿灯教学设计中小学心理健康心理游戏脚本
- 苏教版二年级(下册)科学全册单元测试卷含期中期末(有答案)
- 三年级数学下册口算脱式竖式练习题
评论
0/150
提交评论