解析arp数据包

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序使用命令行运行: 程序名 duration_time filename duration_time为抓包时间,单位为秒 filename 为保存结果的日志文件名 程序输出内容如下所示: 源IP地址 源MAC地址 目的IP地址 目的MAC地址 操作 时间 操作:输出ARP消息格式中的操作字段,若为ARP请求,则为1,若为ARP应 答,则为2, 时间:该ARP包产生的时间
4
ARP数据报格式
硬件类型 物理地址长度 协议地址长度 协议类型 操作
源物理地址(八位组0~3) 源物理地址(八位组4~5) 源IP地址(八位组2~3) 目的物理地址(八位组2~5) 目的IP地址(八位组0~3) 源IP地址(八位组0~1) 目的物理地址(八位组0~1)
5
ARP协议的工作流程
在发送一个ARP分组之前,源主机先根据目的IP地址,在本地ARP高速缓存表中查找与 之对应的目的物理地址。如果找到对应的物理地址,就不用进行地址解析,否则进行地 址解析。 实现地址解析的第一步是产生ARP请求分组。在相应的字段写入本地主机的源物理地址、 源IP地址,在目的物理地址字段写入0,并在操作字段写入1。 将ARP分组发送到本地的数据链路层,并封装成帧。以源物理地址作为源地址,以物理 广播地址(FF-FF-FF-FF-FF-FF)作为目的地址,通过物理层发送出去。 由于采用了广播地址,因此网段内所有的主机都能接受到该帧。除目的主机外,所有接 受到该分组的主机都会丢弃该分组,因为目的主机能够识别ARP消息中的目的IP地址。 目的主机发送ARP应答分组。在ARP应答分组中,以请求分组中源物理地址、源IP地址 作为其目的物理地址、目的IP地址,并将目的主机自身的物理地址、IP地址填入应答分 组的源物理地址、源IP地址字段,并在操作字段中写入2。该分组通过数据链路层以点 对点的方式发送出去(因为现在目的方已经知道双方的物理地址)。 源结点接收到ARP应答分组,知道对应于目的IP地址的目的物理地址,将它作为一条新 记录加入到ARP高速缓存表。 源结点将有完整源IP地址、源物理地址、目的IP地址、目的物理地址的信息和数据作为 一个发送分组,传送给它的数据链路层并封装成桢,然后以点对点方式发送到目的主机。
10
函数ntohs() 将网络字节序转换为主机字节序
在程序设计过程中需要注意网络—主机字节顺序 的转化。由于不同的计算机系统所采用的数据表示方 式不同,对于2B或4B的数据,有的采用低字节地址 存放数据的高权值位,而有的却以低地址字节存放数 据低权位值,在网络的数据传输中,我们应该统一表 示,所以我们在捕获数据包后,应将数据包头部的表 示长度或类型的数据转换成本地机的表达形式。
3
相关知识介绍
ARP数据报
网络上的每台主机或设备都有一个或多个IP地址。IP 地址是网络层的地址,在网络层,数据被组装成IP包。 但是发送IP包需要物理设备的支持(通常是Ethernet 设备,在本课程设计中我们指定为Ethernet设备), 即发送端必须知道目的物理地址才能将IP包发送出去, 所以需要一种将IP地址映射为物理地址的机制。ARP协 议就是用来完成这个任务的。ARP协议能够在同一个物 理网络中,在给定目的主机或设备的IP地址的条件下, 得到目的主机或设备的物理地址。
11
6
程序设计分析参考流程图
开始


取得当前网卡设备列表。 选择Ethernet网卡并打开, 注意判断所选网卡是否为实 际存在的可用网卡。 设置过滤器,此处的过滤器 正则表达式为“arp” 捕获数据包并进行处理(包 括输出各IP地址,物理地址, 操作类型以及时间)。由于 要记录日志文件,为了便于 输出流参数,建议采用 pcap_next_ex()函数。
获取网卡列表
选取Ethernet网卡 打开网卡(混杂模式) 编译设置过滤器
捕获ARP包并将其 相应内容输出
7
课程设计中的重点及难点
使用Winpcap捕获数据包 获取网络设备列表 列出所有网卡,让用户选择需要监视的网卡 以混杂模式打开网卡 编译并设置过滤器 捕获ARP数据包 分析ARP数据包内容
8
获取网络设备列表,并以混杂模式打开网络设备 //获取网络设备列表 if(pcap_findalldevs(&alldevs,errbuf)==-1) { cout<<"Error in pcap_findalldevs:"<<errbuf; return; }
9
获取网络设备列表,并以混杂模式打开网络设备 //获取网络设备列表 if(pcap_findalldevs(&alldevs,errbuf)==-1) { cout<<"Error in pcap_findalldevs:"<<errbuf; return; }
解析arp数据包程序
1
设计训练目的
在网络层中有对重要协议:ARP/RARP, 用于网卡物理地址(MAC地址)与网络协议 地址(IP地址)之间的Fra Baidu bibliotek换。通过这个课程设 计,加深对课本相关知识的理解与掌握。
2
编程要求
通过编制程序,获取网络中的ARP数据包,解析数据包的内容,将 结果显示在标准输出上,并同时写入日志文件。
相关文档
最新文档