黎江超计算机网络课设—解析ARP数据包

上传人:飞*** 文档编号:32306977 上传时间:2018-02-10 格式:DOC 页数:16 大小:375KB
返回 下载 相关 举报
黎江超计算机网络课设—解析ARP数据包_第1页
第1页 / 共16页
黎江超计算机网络课设—解析ARP数据包_第2页
第2页 / 共16页
黎江超计算机网络课设—解析ARP数据包_第3页
第3页 / 共16页
黎江超计算机网络课设—解析ARP数据包_第4页
第4页 / 共16页
黎江超计算机网络课设—解析ARP数据包_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《黎江超计算机网络课设—解析ARP数据包》由会员分享,可在线阅读,更多相关《黎江超计算机网络课设—解析ARP数据包(16页珍藏版)》请在金锄头文库上搜索。

1、南昌航空大学信息工程学院课程设计课程设计题目:解析 ARP 数据包计划学时:2 周所属课程名称:计算机网络课程设计开设时间: 2011 学年第一学期 授课班级: 网络工程 2 班指导教师:周之平学生姓名:黎江超学 号:09046213一,课程设计目的:本课程设计的目的是对网络上的 ARP 数据包进行解析,从而熟悉ARP 数据包的结构,对 ARP 协议有更好的理解和认识。二,课程设计要求:通过编制程序,获取网络中的 ARP 数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。程序的具体要求如下所示:1,以命令行的形式运行,如下所示:arpparse logfile 其中,arp

2、parse 为程序名;为日志文件名。,程序输出内容如下所示:源地址 源地址 目的地址 操作时间各部分的说明如下所示:编号 :捕捉到的包的序号源 IP 地址:输出 ARP 消息格式中的源 IP 地址字段源 MAC 地址:输出 ARP 消息格式中的源物理地址字段目的 IP 地址:输出 ARP 消息格式中的目的 IP 地址字段。目的 MAC 地址:输出 ARP 消息格式中的目的物理地址字段操作:输出 ARP 消息格式中的操作字段,若为 ARP 请求,则为 1,若为ARP 应答,则为 2,时间:捕捉到该 ARP 数据包的时间3,当程序接收到键盘输入 Ctrl+C 时字段三,相关知识a) ARP 数据报

3、的消息格式网络上的每台主机或设备都有一个或多个 IP 地址。IP 地址是网络层的地址,在网络层,数据被组装成 IP 包。但是发送 IP 包需要物理设备的支持(通常是 Ethernet 设备,在本课程设计中我们指定为Ethernet 设备) ,即发送端必须知道目的物理地址才能将 IP 包发送出去,所以需要一种将 IP 地址映射为物理地址的机制。ARP 协议就是用来完成这个任务的。ARP 协议能够在同一个物理网络中,在给定目的主机或设备的 IP 地址的条件下,得到目的主机或设备的物理地址。ARP 协议的数据包格式如图所示:0 8 16 24 31(位) 硬件类型 协议类型物理地址长度 协议地址长度

4、 操作源物理地址(八位组 03)源物理地址(八位组 45) 源 IP 地址(八位组 01)源 IP 地址(八位组 23) 目的物理地址(八位组01)目的物理地址(八位组 25)目的 IP 地址(八位组 03)ARP 数据包的消息格式下面对数据包的各个部分进行说明 硬件类型:指定硬件接口类型。例如,值为 1 表示 Ethernet 协议类型:指定发送方支持的上层协议的类型 物理地址长度:指定物理(硬件)地址的长度 协议地址长度:网络层协议的地址长度。若为 IP 协议,其值为 4 操作:指定 ARP 的操作类型,例如, 1 表示 ARP 请求,2 表示 ARP应答 源物理地址:指定发送方的 IP

5、地址 目的物理地址:指定目的物理地址。 目的 IP 地址:指定目的 IP 地址ARP 分组必须在数据链路层中被封装成侦,才能发送出去封装形式如图所示将 ARP 数据包封装成一个帧b)ARP 协议的工作流程。1) 在发送一个 ARP 分组之前,源主机首先根据目的 IP 地址,在本地 ARP高速缓存表中查找与之对应的目的物理地址。如果找到对应的物理地址,就不用进行地址解析,否则需要进行地址解析。2) 实现地址解析的第一步是产生 ARP 请求分组。在相应的字段写入本地主机的源物理地址、源 IP 地址,在目的物理地址字段写入 0,并在操作字段写入 1。ARP 消息帧头部 帧数据3) 将 ARP 分组发

6、送到本地的数据链路层,并封装成帧。以源物理地址作为源地址,以物理广播地址(FF-FF-FF-FF-FF-FF )作为目的地址,通过物理层发送出去。4) 由于采用了广播地址,因此网段内所有的主机或设备都能接受到该帧。除了目的主机外,所有接受到该分组的主机和设备都会丢弃该分组,因为目的主机能够识别 ARP 消息中的目的 IP 地址。5) 目的主机发送 ARP 应答分组。在 ARP 应答分组中,以请求分组中源物理地址、源 IP 地址作为其目的物理地址、目的 IP 地址,并将目的主机自身的物理地址、IP 地址填入应答分组的源物理地址、源 IP 地址字段,并在操作字段中写入 2。该分组通过数据链路层以点

7、对点的方式发送出去(因为现在目的方已经知道双方的物理地址) 。6) 源结点接收到 ARP 应答分组,知道对应于目的 IP 地址的目的物理地址,将它作为一条新记录加入到 ARP 高速缓存表。7) 源结点将有完整源 IP 地址、源物理地址、目的 IP 地址、目的物理地址的信息和数据作为一个发送分组,传送给它的数据链路层并封装成桢,然后以点对点的方式发送到目的主机。图 1 ARP 工作原理四,课程设计分析课程设计中的重点及难点1) 本课设我小组采用 java 语言编写,JAVA 语言虽然在 TCP/UDP 传输方面给予了良好的定义,但对于网络层以下的控制,却是无能为力的。JPCAP 扩展包弥补了这一

8、点。JPCAP 实际上并非一个真正去实现对数据链路层的控制,而是一个中间件,JPCAP 调用 wincap/libpcap,而给 JAVA 语言提供一个公共的接口,从而实现了平台无关性。在官方网站上声明,JPCAP 支持 FreeBSD 3.x, Linux RedHat 6.1, Fedora Core 4, Solaris, and Microsoft Windows 2000/XP 等系统。: 输出网卡设备列表。 选择网卡并打开。 捕获数据包时,可能需要设置过滤器。 捕获数据包或者发送数据包。2) 在程序设计过程中需要注意网络主机字节顺序的转化。由于不同的计算机系统所采用的数据表示方式不

9、同,对于 2B 或 4B 的数据,有的采用低字节地址存放数据的高权值位,而有的却以低地址字节存放数据低权位值,在网络的数据传输中,我们应该统一表示,所以我们在捕获数据包后,应将数据包头部的表示长度或类型的数据转换成本地机的表达形式。可以利用函数 valuesOf()将网络字节序转换为主机字节序。3) 选择网卡并打开时,注意选择可用的网卡。4) 第一种是通过回调函数的机制,另一种是利用 JpcapCaptor 实例的getPacket()的方法,一个数据包一个数据包的接收。第一种是类似与事件触发的机制。为了了解 ARP 包的具体解析过程我们采用回调函数机制,首先,你要自定义一个类,该类必顺实现

10、PacketReceiver 接口,(在事件处理机制雷同)。PacketReciver 接口只声名了 receivePacket(Packet packet) 方法,所以你要在你自义的类中实现该方法,方法体里放置你处理接收到的数据包的代码,得到的数据包为型参 packet.接着,你就可以通过调用 JpcapCaptor 类的实例的 processPacket()或 loopPacket()来开始接收数据包。开始接收数据包后,当接收到数据包时就会回调实现 PacketReceiver 接口的类的 receivePacket 的方法,使理接收到的数据包。1. 参考算法1) 取得当前网卡设备列表。2

11、) 选择 Ethernet 网卡并打开,注意判断所选网卡是否为实际存在的可用网卡。3) 设置过滤器,此处的过滤器正则表达式为“arp”或者“ether protoarp”。4) 捕获数据包并进行处理(包括输出各 IP 地址,物理地址,操作类型以及时间) 。由于要记录日志文件,为了便于输出流参数,建议采用Vector 向量存储方式。流程图如图所示:五,自己负责的功能核心代码,/向文本区写入捕获到的 ARP 包的信息并加入自动控制程序class Receiver implements PacketReceiver public void receivePacket(Packet packet) /

12、匿名类,每捕获一个包就调用此方法 ,打开数据包包并输出Vector Data=new Vector();String s6=;String s7=;String s8=;String s9=;String s10=;String s11=;/添加捕捉到的包序号Data.add(Number);/自动控制判断行 1if(jcb1.isSelected()开始获取网卡列表选取 Ethernet 网卡打开网卡(混杂模式)编译设置过滤器捕获 ARP 包并将其相应内容输出 itemselfClear=Integer.valueOf(baoNumber.getText();if(Number%itemse

13、lfClear=0)jta.setText(null);/自动控制判断行 2if(jcb2.isSelected()itemselfSleep=Integer.valueOf(baogeshu.getText();SleepTime=Integer.valueOf(miaoshu.getText();if(Number%itemselfSleep=0)try Thread.sleep(SleepTime); catch (InterruptedException e) / TODO Auto-generated catch blocke.printStackTrace();Number+;Da

14、ta.add(ARPPacket) packet).getSenderProtocolAddress(); /源 ip 地址Data.add(ARPPacket) packet).getSenderHardwareAddress(); /源 mac 地址Data.add(ARPPacket) packet).getTargetProtocolAddress();/目的 ip 地址Data.add(ARPPacket) packet).getTargetHardwareAddress();/目的 mac 地址if(Short.valueOf(ARPPacket.ARP_REQUEST).equa

15、ls(ARPPacket) packet).operation) Data.add(请求); else if(Short.valueOf(ARPPacket.ARP_REPLY).equals(ARPPacket) packet).operation) Data.add(应答); if(ARPcache_ip.size()=0)ARPcache_ip.add(ARPPacket) packet).getSenderProtocolAddress(); /源 ip 地址ARPcache_mac.add(ARPPacket) packet).getSenderHardwareAddress(); /源mac 地址else for(int i=0;i9)s11= ;for(int i=0;ilib-到ext 文件夹里面就可以了) , 配置 Eclipse 的 JRE 环境, (一定需要) ,选Window-preferences-Java-Installed JREs,在 Installed JREs 选择框中选择相应的 JRE 版本,点 Edit,选择 Add External JARs,选择的 Jpcap.jar 包(C:Prog

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 广告经营

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