




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、郑州轻工业学院网络协议分析课程设计设计题目:解析IP数据包姓 名: 院 (系): 专业班级: 学 号: 指导教师: 成 绩: 时间: 2011年6月12日至 2011年6月17日郑州轻工业学院课 程 设 计 任 务 书题目 解析IP数据包 专业、班级 学号 姓名 程序在Windows窗口环境下捕获IP数据报,并解析出各个字段信息,显示在窗口中。选定本机IP后,程序捕获经过对应网卡的IP数据报,根据IP数据报的结构,拆分获得各字段的值,显示在窗口上。同时程序可以将捕获的所有数据信息导出到日志文件。参考资料:网络协议分析寇晓蕤 罗军勇 蔡延荣 机械工业出版社完 成 期 限:2011.6.13-20
2、10.6.17指导教师签名: 课程负责人签名: 2010年 6月 17 日目录第一章引言41.1.关于题目41.1.1.题目要求41.1.2.选题背景41.2.关于编译软件41.3.关于稳定性5第二章程序设计52.主要功能设计52.1.程序流程5第三章程序实现63.类设计声明63.1.RawSocket类73.2.EventArgs类73.3.Header结构83.4.主要功能的实现83.4.1.程序界面83.4.2.获得主机IP93.4.3.显示列表103.4.4.详细信息113.4.5.导出日志12第四章程序测试144.程序测试14总结与体会15附录:15第一章 引言1.1. 关于题目1.
3、1.1. 题目要求(1) 捕获网络中的IP数据包,解析数据包的内容,显示结果,并将结果写入日志文件。(2) 显示的内容包括:捕获的IP包的版本、头长度、服务类型、数据包总长度、数据包标识、分段标志、分段偏移值、生存时间、上层协议类型、头校验和、源IP地址和目的IP地址等内容。(3) 设置停止标志,当程序接收到停止命令时即停止。1.1.2. 选题背景IP数据包是网络协议学习过程中容易接触到的,选择这个题目一是为了将自己的所学知识加以运用,二是希望通过探索实践去实现题目,在实践和实际的项目中提高自己的编程能力。因此我选定了这个题目。1.2. 关于编译软件本程序使用C#语言,Microsoft Vi
4、sual Studio 2005进行编译。Visual Studio 是微软公司推出的开发环境,Visual Studio 可以用来创建 Windows 平台下的 Windows 应用程序和网络应用程序,也可以用来创建网络服务、智能设备应用程序和 Office 插件。1.3. 关于稳定性经测试,本程序可以在windows操作系统中稳定运行,较为稳定。要求至少安装.Net Framework 2.0。第二章 程序设计2. 主要功能设计根据分析,这个程序要实现如下几个功能,初始化、捕获数据包、显示、导出日志。其中捕获数据包是程序的核心部分,是后续操作的基础。程序结构如图2-1所示。图2-1 程序结
5、构图2.1. 程序流程根据分析后的程序结构图设计出相应的流程图。内容主要包括初始化,获得主机IP列表,绑定Socket,开始捕获数据,分析数据,显示数据项,导出日志文件,根据用户操作退出程序。图2-2 流程图第三章 程序实现3. 类设计声明根据程序的结构,将程序需要实现的功能细化为相应的类属性和成员函数。程序有两个类,一个RawSocket类,用于数据包相关捕获和处理。一个EventArgs类,用于类间传递信息。同时还有一个公共结构体,对应IP数据包的格式。3.1. RawSocket类public class RawSocket private bool error_occurred;/是否
6、产生错误 public bool KeepRunning;/是否继续进行 private static int len_receive_buf;/得到的数据流的长度 byte receive_buf_bytes;/收到的字节 private Socket socket = null; /声明套接字public void Run()/开始接收public void CreateAndBindSocket(string IP)/建立并绑定套接字public void Shutdown()/停止接收private bool SetSocketOption()/设置套接字 private void R
7、eceive(byte buf, int len) /解析接收的数据包 ;3.2. EventArgs类class squarprivate string ip_version;/ 版本 private uint header_length;/首部长度 private string service_type;/服务类型 private uint total_packet_length;/总长度 private string identification;/标识 private string flags;/标志 private string fragment_offset;/片偏移量 priva
8、te string time_to_live;/寿命 private string protocol;/协议 private string checksum;/校验和 private string destination_address;/目的IP地址 private string origination_address;/源IP地址 private uint message_length;/数据长度;3.3. Header结构public struct IPHeader public byte ip_verlen; public byte ip_tos; public ushort ip_t
9、otallength; public ushort ip_id; public ushort ip_offset; public byte ip_ttl; public byte ip_protocol; public ushort ip_checksum; public uint ip_srcaddr; public uint ip_destaddr;3.4. 主要功能的实现3.4.1. 程序界面菜单栏及工具栏包含了基本操作按钮,包括退出程序,关于信息,选择IP,开始捕获和导出日志。窗体主要为显示报文信息的列表区和具体字段区,分别用树视图显示。具体界面如图3-1所示。图3-13.4.2. 获
10、得主机IP通过System的Net类函数,容易获得主机的所有IP。代码如下:private void GetHostIP() string hostName = Dns.GetHostName(); IPHostEntry ipEntry = Dns.GetHostEntry(hostName); IPAddress addr = ipEntry.AddressList; foreach (IPAddress ip in addr) toolStripComboBox1.Items.Add(ip.ToString(); 具体结果如图3-2所示。图3-23.4.3. 显示列表捕获数据后,触发事件
11、,在事件处理函数里,将传递的参数信息添加到主窗体信息列表里。void rawSocket_PacketArrival(object sender, RawSocket.PacketArrivedEventArgs args)TreeNode rootNode = new TreeNode();TreeNode ipNode = MakeIPTreeNode(args);rootNode.Nodes.Add(ipNode);rootNode.Text = args.OriginationAddress + - + args.DestinationAddress;AddTreeNode addTr
12、eeNode = new AddTreeNode(OnAddTreeNode);reeView1.Invoke(addTreeNode, new object rootNode );结果如图3-3所示。图3-33.4.4. 详细信息点击列表项,该项对应数据包的详细信息会显示在窗体右侧树形显示。private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) TreeNode curr = e.Node; if (curr.Level = 0) treeView2.Nodes.Clear();
13、TreeNode root = (TreeNode)curr.Nodes0.Clone(); treeView2.Nodes.Add(root); treeView2.ExpandAll(); 结果如图3-4所示。图3-43.4.5. 导出日志程序可以将当前列表的所有数据保存在日志文件里,默认路径为程序运行目录,以导出时间命名。代码如下:private void toolStripButton2_Click(object sender, EventArgs e) string logName = DateTime.Now.ToString(yyyyMMddhhmmss) + .log; Fil
14、eStream fs = new FileStream(logName, FileMode.Create, FileAccess.Write); StreamWriter sw = new StreamWriter(fs); foreach (TreeNode tr1 in treeView1.Nodes) sw.Write(tr1.Text + Environment.NewLine); TreeNode temp = tr1.Nodes0; sw.Write( + temp.Text + Environment.NewLine); foreach (TreeNode tr2 in temp
15、.Nodes) sw.Write( + tr2.Text + Environment.NewLine); sw.Write(Environment.NewLine); sw.Close(); fs.Close(); MessageBox.Show(日志保存成功!); 结果如图3-5所示。图3-5图3-6第四章 程序测试4. 程序测试经过调试和修改,程序完全实现设计要求,成功抓取了IP数据包,并分析显示了数据包各字段的信息,达到了这次实训的要求和目的。程序正常运行,能够捕获IP数据包,显示数据列表和数据项的详细信息,并且成功导出到日志文件。程序欢迎界面如图4-1所示。图4-1总结与体会通过这次课
16、程设计,我收获了很多。首先把所学知识加以利用和巩固,其次在实践中遇到问题去探索和学习,更增加了新知识。在程序设计编写过程中,使用异步来处理数据包的接受和处理,异步线程要添加数据项到主线程创建的界面,这就需要处理两个线程间的数据交换。使用托管函数调用主线程的控件,添加数据项,实践证明达到了预期的目的,积累了经验。这次的课程设计使我掌握了一定的网络编程知识,同时也掌握了探索问题解决问题的方法。更好的理解课本的知识,为以后的进一步学习和考试打下良好的基础。附录:程序主要代码/解析接收的数据包,形成PacketArrivedEventArgs时间数据类对象,并引发PacketArrival事件 uns
17、afe private void Receive(byte buf, int len) byte temp_tos = 0; byte temp_protocol = 0; uint temp_version = 0; ushort temp_identification = 0; int temp_flags = 0; int temp_fragmentOffset = 0; byte temp_ttl = 0; ushort temp_check = 0; uint temp_ip_srcaddr = 0; uint temp_ip_destaddr = 0; IPAddress temp
18、_ip; PacketArrivedEventArgs e = new PacketArrivedEventArgs(); fixed (byte* fixed_buf = buf) IPHeader* head = (IPHeader*)fixed_buf; temp_version = (uint)(head-ip_verlen & 0xF0) 4; e.IPVersion = temp_version.ToString(); e.HeaderLength = (uint)(head-ip_verlen & 0x0F) ip_tos; e.TypeOfService = string.Fo
19、rmat(0x0:x2 (1),temp_tos,temp_tos); temp_identification = head-ip_id; e.Identification = temp_identification.ToString(); temp_flags = (head-ip_offset) 13; e.Flags = temp_flags.ToString(); temp_fragmentOffset = (head-ip_offset) & 0x1FFF; e.FragmentOffset = temp_fragmentOffset.ToString(); temp_ttl = h
20、ead-ip_ttl; e.TimeToLive = temp_ttl.ToString(); temp_protocol = head-ip_protocol; switch (temp_protocol) case 1: e.Protocol = ICMP; break; case 2: e.Protocol = IGMP; break; case 6: e.Protocol = TCP; break; case 17: e.Protocol = UDP; break; default: e.Protocol = UNKNOWN; break; temp_check = head-ip_c
21、hecksum; e.Checkum = string.Format(0x0:x2, temp_check); temp_ip_srcaddr = head-ip_srcaddr; temp_ip_destaddr = head-ip_destaddr; temp_ip = new IPAddress(temp_ip_srcaddr); e.OriginationAddress = temp_ip.ToString(); temp_ip = new IPAddress(temp_ip_destaddr); e.DestinationAddress = temp_ip.ToString(); e
22、.PacketLength = (uint)len; e.MessageLength = (uint)len - e.HeaderLength; OnPacketArrival(e); /添加数据项private TreeNode MakeIPTreeNode(RawSocket.PacketArrivedEventArgs arg) TreeNode ipNode = new TreeNode(); ipNode.Text = IP数据包; ipNode.Nodes.Add(版本: + arg.IPVersion); ipNode.Nodes.Add(首部长度: + arg.HeaderLength); ipNode.Nodes.Add(服务类型: + arg.TypeOfService); ipNode.Nodes.Add(总长度: + arg.PacketLength); ipNode.Nodes.Add(标识: + arg.Identification); ipNode.Nodes.Add(标志: + arg.Flags); ipNode.Nodes.Add(片偏移量: + arg.FragmentOffset); ipNode.Nodes.Add(寿命: +arg.TimeToLive); ip
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中职技能竞赛管理办法
- 主任基金使用管理办法
- 仓库工作标签管理办法
- 企业培训合同管理办法
- 企业培训交付管理办法
- 临时交通安全管理办法
- 乡镇数据安全管理办法
- 人民银行贷款管理办法
- 交易安全设施管理办法
- 乡镇通讯基站管理办法
- 橙色插画风部门纳新活动模板
- 起重作业安全知识考核试题(含答案)
- 2025至2030中国医疗头戴式显示器行业产业运行态势及投资规划深度研究报告
- 枪支安全管理培训课件
- 浙江省丽水市普通高中2024-2025学年高二上学期期末教学质量监控日语试卷(PDF版含答案不含音频和听力原文)
- 2025至2030电子海图行业产业运行态势及投资规划深度研究报告
- 小程序公司推广活动方案
- 公交车消防课件
- 厂家促销活动以旧换新活动方案
- 2025年湖北省中考英语试题(附答案)
- 2025中国系统性红斑狼疮诊疗指南解读课件
评论
0/150
提交评论