解析ARP数据包计算机网络课程设计.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
解析ARP数据包计算机网络课程设计

计算机网络 课程设计报告 题 目: 解析ARP数据包 姓 名: 学 号: 同组姓名: 专业班级: 指导教师: 评阅意见: 评定成绩: 指导老师签名: 年 月 日 目 录 一、课程设计目的: 2 二、课程设计要求: 2 三、课程设计分析 3 1.课程设计中的重点及难点 3 2.参考算法 3 3.核心代码 4 四、源程序及运行截图 5 五、心得体会 9 六、参考文献 10 一、课程设计目的: 本课程设计的目的是对网络上的ARP数据包进行解析,从而熟悉ARP数据包的结构,对ARP协议有更好的理解和认识。 二、课程设计要求: 通过编制程序,获取网络中的ARP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。 程序的具体要求如下所示: 1.以命令行的形式运行,如下所示: arpparse logfile 其中,arpparse为程序名;logfile为日志文件名。 2.程序输出内容如下所示: 源IP地址  源MAC地址  目的IP地址   操作  时间 各部分的说明如下所示: 源IP地址:输出ARP消息格式中的源IP地址字段。 源MAC地址:输出ARP消息格式中的源物理地址字段。 目的IP地址:输出ARP消息格式中的目的IP地址字段。 目的MAC地址:输出ARP消息格式中的目的物理地址字段。 操作:输出ARP消息格式中的操作字段,若为ARP请求,则为1,若为ARP应答,则为2。 时间:该ARP包产生的时间 3.当程序接收到键盘输入Ctrl+C时退出。 三、课程设计分析 1.课程设计中的重点及难点 程序中会用到Winpcap,Winpcap是Win32环境下数据包捕获的开放代码函数库。基于Winpcap的应用程序一般按照下面几个步骤进行设计: 输出网卡设备列表。 选择网卡并打开。 捕获数据包时,可能需要设置过滤器。 捕获数据包或者发送数据包。 在程序设计过程中需要注意网络—主机字节顺序的转化。由于不同的计算机系统所采用的数据表示方式不同,对于2B或4B的数据,有的采用低字节地址存放数据的高权值位,而有的却以低地址字节存放数据低权位值,在网络的数据传输中,我们应该统一表示,所以我们在捕获数据包后,应将数据包头部的表示长度或类型的数据转换成本地机的表达形式。可以利用函数ntohs()将网络字节序转换为主机字节序。 选择网卡并打开时,注意选择可用的网卡。 2.参考算法 取得当前网卡设备列表。 选择Ethernet网卡并打开,注意判断所选网卡是否为实际存在的可用网卡。 设置过滤器,此处的过滤器正则表达式为“arp”或者“ether proto\\arp”。 捕获数据包并进行处理(包括输出各IP地址,物理地址,操作类型以及时间)。由于要记录日志文件,为了便于输出流参数,建议采用pcap_next_ex()函数。 流程图如下图所示: 3.核心代码 ARP数据包结构 struct arppkt{ unsigned short hdtyp; //硬件类型。值0001表示其为Ethernet unsigned short protyp; //协议类型。值0800表示上层协议为IP unsigned char hdsize; //硬件地址长度。值为06 unsigned char prosize; //协议地址长度。值为04 unsigned short op; //操作值为0001/0002,分别表示ARP请求/应答 u_char smac[6]; //源MAC地址,6B u_char sip[4]; //源IP地址,4B u_char dmac[6]; //目的MAC地址 u_char dip[4]; //目的IP地址 }; //获取网络设备列表 if(pcap_findalldevs(alldevs,errbuf)==-1) { coutError in pcap_findalldevs:errbuf; return; } //选择Ethernet卡 for(d=alldevs;d;d=d-next) { //以混杂模式打开网卡,以接受所有的帧 if((adhandle=pcap_open_live(d-name,1000,1,300,errbuf))==NULL) { cou

文档评论(0)

feixiang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档