




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上南昌航空大学信息工程学院课程设计课程设计题目:解析ARP数据包计划学时:2周所属课程名称:计算机网络课程设计开设时间: 2011学年第一学期 授课班级: 网络工程2班指导教师:周之平学生姓名:黎江超学 号: 一,课程设计目的: 本课程设计的目的是对网络上的ARP数据包进行解析,从而熟悉ARP数据包的结构,对ARP协议有更好的理解和认识。二,课程设计要求: 通过编制程序,获取网络中的ARP数据包,解析数据包的内容,将结果显示在标准输出上,并同时写入日志文件。程序的具体要求如下所示:1,以命令行的形式运行,如下所示:arpparse logfile其中,arpparse为
2、程序名;为日志文件名。,程序输出内容如下所示:源地址 源地址 目的地址 操作时间各部分的说明如下所示:编号 :捕捉到的包的序号源IP地址:输出ARP消息格式中的源IP地址字段源MAC地址:输出ARP消息格式中的源物理地址字段目的IP地址:输出ARP消息格式中的目的IP地址字段。目的MAC地址:输出ARP消息格式中的目的物理地址字段操作:输出ARP消息格式中的操作字段,若为ARP请求,则为1,若为ARP应答,则为2,时间:捕捉到该ARP数据包的时间3,当程序接收到键盘输入Ctrl+C时字段三,相关知识a) ARP数据报的消息格式网络上的每台主机或设备都有一个或多个IP地址。IP地址是网络层的地址
3、,在网络层,数据被组装成IP包。但是发送IP包需要物理设备的支持(通常是Ethernet设备,在本课程设计中我们指定为Ethernet设备),即发送端必须知道目的物理地址才能将IP包发送出去,所以需要一种将IP地址映射为物理地址的机制。ARP协议就是用来完成这个任务的。ARP协议能够在同一个物理网络中,在给定目的主机或设备的IP地址的条件下,得到目的主机或设备的物理地址。ARP协议的数据包格式如图所示: 0 8 16 24 31(位) 硬件类型 协议类型物理地址长度协议地址长度 操作 源物理地址(八位组03) 源物理地址(八位组45) 源IP地址(八位组01) 源IP地址(八位组23) 目的物
4、理地址(八位组01) 目的物理地址(八位组25) 目的IP地址(八位组03)ARP数据包的消息格式下面对数据包的各个部分进行说明l 硬件类型:指定硬件接口类型。例如,值为1表示Ethernetl 协议类型:指定发送方支持的上层协议的类型l 物理地址长度:指定物理(硬件)地址的长度l 协议地址长度:网络层协议的地址长度。若为IP协议,其值为4l 操作:指定ARP的操作类型,例如,1表示ARP请求,2表示ARP应答l 源物理地址:指定发送方的IP地址l 目的物理地址:指定目的物理地址。l 目的IP地址:指定目的IP地址ARP分组必须在数据链路层中被封装成侦,才能发送出去封装形式如图所示ARP消息帧
5、头部 帧数据 将ARP数据包封装成一个帧b)ARP协议的工作流程。1) 在发送一个ARP分组之前,源主机首先根据目的IP地址,在本地ARP高速缓存表中查找与之对应的目的物理地址。如果找到对应的物理地址,就不用进行地址解析,否则需要进行地址解析。2) 实现地址解析的第一步是产生ARP请求分组。在相应的字段写入本地主机的源物理地址、源IP地址,在目的物理地址字段写入0,并在操作字段写入1。3) 将ARP分组发送到本地的数据链路层,并封装成帧。以源物理地址作为源地址,以物理广播地址(FF-FF-FF-FF-FF-FF)作为目的地址,通过物理层发送出去。4) 由于采用了广播地址,因此网段内所有的主机或
6、设备都能接受到该帧。除了目的主机外,所有接受到该分组的主机和设备都会丢弃该分组,因为目的主机能够识别ARP消息中的目的IP地址。5) 目的主机发送ARP应答分组。在ARP应答分组中,以请求分组中源物理地址、源IP地址作为其目的物理地址、目的IP地址,并将目的主机自身的物理地址、IP地址填入应答分组的源物理地址、源IP地址字段,并在操作字段中写入2。该分组通过数据链路层以点对点的方式发送出去(因为现在目的方已经知道双方的物理地址)。6) 源结点接收到ARP应答分组,知道对应于目的IP地址的目的物理地址,将它作为一条新记录加入到ARP高速缓存表。图1 ARP工作原理7) 源结点将有完整源IP地址、
7、源物理地址、目的IP地址、目的物理地址的信息和数据作为一个发送分组,传送给它的数据链路层并封装成桢,然后以点对点的方式发送到目的主机。四,课程设计分析课程设计中的重点及难点1) 本课设我小组采用java语言编写,JAVA语言虽然在TCP/UDP传输方面给予了良好的定义,但对于网络层以下的控制,却是无能为力的。JPCAP扩展包弥补了这一点。JPCAP实际上并非一个真正去实现对数据链路层的控制,而是一个中间件,JPCAP调用wincap/libpcap,而给JAVA语言提供一个公共的接口,从而实现了平台无关性。在官方网站上声明,JPCAP支持FreeBSD 3.x, Linux RedHat 6.
8、1, Fedora Core 4, Solaris, and Microsoft Windows 2000/XP等系统。:l 输出网卡设备列表。l 选择网卡并打开。l 捕获数据包时,可能需要设置过滤器。l 捕获数据包或者发送数据包。2) 在程序设计过程中需要注意网络主机字节顺序的转化。由于不同的计算机系统所采用的数据表示方式不同,对于2B或4B的数据,有的采用低字节地址存放数据的高权值位,而有的却以低地址字节存放数据低权位值,在网络的数据传输中,我们应该统一表示,所以我们在捕获数据包后,应将数据包头部的表示长度或类型的数据转换成本地机的表达形式。可以利用函数valuesOf()将网络字节序转换
9、为主机字节序。3) 选择网卡并打开时,注意选择可用的网卡。4) 第一种是通过回调函数的机制,另一种是利用JpcapCaptor实例的getPacket()的方法,一个数据包一个数据包的接收。第一种是类似与事件触发的机制。为了了解ARP包的具体解析过程我们采用回调函数机制,首先,你要自定义一个类,该类必顺实现PacketReceiver接口,(在事件处理机制雷同)。PacketReciver接口只声名了receivePacket(Packet packet) 方法,所以你要在你自义的类中实现该方法,方法体里放置你处理接收到的数据包的代码,得到的数据包为型参packet. &
10、#160; 接着,你就可以通过调用JpcapCaptor类的实例的processPacket()或loopPacket()来开始接收数据包。开始接收数据包后,当接收到数据包时就会回调实现PacketReceiver接口的类的receivePacket的方法,使理接收到的数据包。1. 参考算法1) 取得当前网卡设备列表。2) 选择Ethernet网卡并打开,注意判断所选网卡是否为实际存在的可用网卡。3) 设置过滤器,此处的过滤器正则表达式为“arp”或者“ether protoarp”。4) 捕获数据包并进行处理(包括输出各IP地址,物理地址,操作类型以及时间)。由于要记录日志文件,
11、为了便于输出流参数,建议采用Vector向量存储方式。流程图如图所示:开始获取网卡列表选取Ethernet网卡打开网卡(混杂模式)编译设置过滤器捕获ARP包并将其相应内容输出五,自己负责的功能核心代码,/向文本区写入捕获到的ARP包的信息并加入自动控制程序class Receiver implements PacketReceiver public void receivePacket(Packet packet) /匿名类,每捕获一个包就调用此方法 ,打开数据包包并输出 Vector Data=new Vector(); String s6="" String s7=&q
12、uot;" String s8="" String s9="" String s10="" String s11="" /添加捕捉到的包序号 Data.add(Number); /自动控制判断行1 if(jcb1.isSelected() itemselfClear=Integer.valueOf(baoNumber.getText(); if(Number%itemselfClear=0) jta.setText(null); /自动控制判断行2 if(jcb2.isSelected() itemsel
13、fSleep=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+; Data.add(ARPPacket) packet).getSenderProtocolAddress(); /源ip地址
14、 Data.add(ARPPacket) packet).getSenderHardwareAddress(); /源mac地址 Data.add(ARPPacket) packet).getTargetProtocolAddress();/目的ip地址 Data.add(ARPPacket) packet).getTargetHardwareAddress();/目的mac地址 if(Short.valueOf(ARPPacket.ARP_REQUEST).equals(ARPPacket) packet).operation) Data.add("请求"); else
15、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;i<ARPcache_i
16、p.size();i+) if(String.valueOf(Data.get(0).equals(String.valueOf(ARPcache_ip.get(i)/判断ip是否存在缓存表中 /判断mac地址是否相同 if(!String.valueOf(Data.get(1).equals(String.valueOf(ARPcache_mac.get(i) isDeceive=true; /存在arp欺骗 break; elseARPcache_ip.add(ARPPacket) packet).getSenderProtocolAddress(); /源ip地址ARPcache_mac
17、.add(ARPPacket) packet).getSenderHardwareAddress(); /源mac地址 break; /显示时间 Date nowTime=new Date(); SimpleDateFormat format=new SimpleDateFormat("HH:mm:ss"); Data.add(format.format(nowTime); DataOut.add(Data); / 显示信息 String s0=""+Data.get(1); String s1=""+Data.get(2); Str
18、ing s2=""+Data.get(3); String s3=""+Data.get(4); String s4=""+Data.get(5); String s5=""+Data.get(6); if(Number<10) s11=" " else if(Number>9)s11=" " for(int i=0;i<16-s0.length();i+)s6=s6+" " for(int i=0;i<25-s1.length()
19、;i+)s7=s7+" " for(int i=0;i<16-s2.length();i+)s8=s8+" " for(int i=0;i<30-s0.length();i+)s9=s9+" " for(int i=0;i<22;i+)s10=s10+" " s6=s6+" " s8=s8+" " /输出数据 if(!isDeceive) /正常输出 insert(" "+String.valueOf(Number),Color.blac
20、k); insert(s11+s0,Color.black); insert( s6+s1,Color.black);insert(s7+s2,Color.black);insert(s8+s3,Color.black);insert(s9+s4,Color.black);insert(s10+s5+"rn",Color.black); else if(isDeceive) /出现arp欺骗时,警告输出 insert(" "+String.valueOf(Number),Color.red); insert(s11+s0,Color.red); inse
21、rt( s6+s1,Color.red); insert(s7+s2,Color.red); insert(s8+s3,Color.red); insert(s9+s4,Color.red); insert(s10+s5+"rn",Color.red); isDeceive=false; /插入数据的函数 public void insert(String str,Color col) Document doc=jta.getDocument(); /获得JTextPane的Document SimpleAttributeSet attrSet = new SimpleAt
22、tributeSet(); /定义字符样式 StyleConstants.setForeground(attrSet,col); /设置颜色颜色 try doc.insertString(doc.getLength(), str, attrSet); catch (BadLocationException e) e.printStackTrace(); 六,程序运行效果如下整体功能如下图所示输出日志文件效果如下查看日志文件清空后的结果通过检测ip冲突检测ARP欺骗七,功能扩充1,以图形化界面设计,改善程序运行时的视觉效果,同时图形化界面操作简单,界面友好,也方便非计算机专业人员的使用。2,通过
23、检测IP冲突,可以检测到ARP欺骗。3,通过增加自动控制功能可以让程序休息一段时间后继续工作已经自动清屏功能八,实验中遇到的问题1、本程序是在命令行模式下运行,只有C+版本的没有java版本,并且书本上java这方面的知识可以确定为零,我们小组通过上网查资料和其他书本上的相应知识找到了下手的地方,且设计了美观的界面。2、程序点两次捕获就会异常退出,弹出一个消息框完美解决了这个问题;3、程序布局很困难,java界面编程不行,导致界面设计话了很大一部分时间。4、编译环境配置比较麻烦,虽然JPCAP函数封装性好,效率高,使用方便,但是,使用前的准备工作在不知如何配置的情况下要花费大量时间,介绍一下J
24、PCAP的配置。一、首先必须安装Winpcap,首要条件。二、安装最新版本jpcap 配置Jpcap路径:这一步也是最重要的一步。具体路径为,把Jpcap文件夹下lib文件夹里的Jpcap.dll复制到"C:Program FilesJavajre1.6.0_07bin"文件夹里面(复制到你机器JRE文件夹放到bin文件夹里面就可以了,其中JRE的版本一定要与Eclipse配置的版本一致),再把Jpcap文件夹下lib文件夹里的Jpcap.jar复制到"C:Program FilesJavajre1.6.0_07libext"文件夹里面(复制到你机器JRE文件夹->lib->到ext文件夹里面就可以了), 配置Eclipse的JRE环境,(一定需要),选Window->preferences->Java->Installed JREs,在Installed JREs选择框中选择相应的JRE版本,点Edit,选择Add External JARs,选择的Jpcap.jar包("C:Program FilesJavajre1.6.0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 稀土金属冶炼的节能减排目标责任制考核考核试卷
- 融资租赁行业创新业务模式探讨考核试卷
- 碳酸饮料行业消费者偏好研究考核试卷
- 财务税务数字化转型与管理培训考核试卷
- 纤维板制造中的生产数据挖掘与分析考核试卷
- 洗浴服务流程优化考核试卷
- 运动服装生产中的节能减排措施考核试卷
- 新媒体广告内容策划与创意设计执行协议
- 股权转让手续中的股权回购及退出机制协议
- 金融服务合同纠纷赔偿补充协议
- MOOC 中医看妇科-女性一生的康与病-广州中医药大学 中国大学慕课答案
- 珍奇观赏植物智慧树知到期末考试答案章节答案2024年西南大学
- 工业园区环保管家技术方案
- (正式版)QBT 8006-2024 年糕 标准
- 备货合同协议书范本
- 部编版(2016) 七年级下册 第五单元整体备课 教学设计
- 转化英语后进生之我见
- 长城:一部世界文化遗产的史诗
- 2023年文印服务实施方案
- 2023年医学高级职称-眼科(医学高级)考试冲刺-历年真题演练带答案
- 财务岗位笔试试题附有答案
评论
0/150
提交评论