计算机网络解析ARP数据包_第1页
计算机网络解析ARP数据包_第2页
计算机网络解析ARP数据包_第3页
计算机网络解析ARP数据包_第4页
计算机网络解析ARP数据包_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

沈阳理工大学课程设计专用纸 Noi 沈阳理工大学 成成 绩绩 评评 定定 表表 学生姓名班级学号1103050409 专 业计算机科学 与技术 课程设计题目解析 ARP 数据 包 评 语 组长签字 成绩 日期 20 年 月 日 沈阳理工大学课程设计专用纸 Noii 沈阳理工大学 课程设计任务书课程设计任务书 学 院信息科学与工程学院专 业计算机科学与技术 学生姓名班级学号 课程设计题目解析 ARP 数据包 实践教学要求与任务实践教学要求与任务 1 课程设计的目的是对网络上的 ARP 数据包进行解析 从而熟悉 ARP 数据包的结构 对 ARP 协议有更好的理解和认识 2 通过编写程序 获取网络中的 ARP 数据包 解析数据包的内容 将结果显示在标准输出上 并同时写入日志文件 工作计划与进度安排工作计划与进度安排 第 15 周 星期一 设计任务分析和总体设计 星期二 软件算法和流程设计 星期三 软件编码实现 星期四 软件总体调试 星期五 交课程设计报告 答辩 验收程序 指导教师 201 年 月 日 专业负责人 201 年 月 日 学院教学副院长 201 年 月 日 沈阳理工大学课程设计专用纸 Noiii 沈阳理工大学 目目 录录 摘摘 要要 1 课程设计目的课程设计目的 1 2 课程设计要求课程设计要求 1 3 相关知识相关知识 1 4 课程设计分析课程设计分析 1 5 程序代码程序代码 1 6 运行结果与分析运行结果与分析 1 7 个人心得个人心得 1 8 参考文献参考文献 1 沈阳理工大学课程设计专用纸 No1 沈阳理工大学 摘摘 要要 本文首先介绍了解析 ARP 数据包课程设计的目的与意义 本次课程设计 的要求 接着说明了 什么是 ARP ARP 数据报消息格式以及 ARP 协议的工 作流程加强我们对 ARP 协议的认识 然后分析了本次课程设计的难点 重点 参考算法 核心代码 以及对运行结果的分析 还有一些相关知识的拓展 最后对本次课设进行了个人心得的总结 沈阳理工大学课程设计专用纸 No2 沈阳理工大学 1 课程设计目的课程设计目的 课程设计的目的是对网络上的 ARP 数据包进行解析 从而熟悉 ARP 数据包的结构 对 ARP 协议有更好的理解和认识 2 课程设计要求课程设计要求 通过编写程序 获取网络中的 ARP 数据包 解析数据包的内容 将结果显示在标准输出上 并同时写入日志文件 程序的具体要求如下所示 1 以命令行的形式运行 如下所示 ParseArp log file 其中 arpparse 为程序名 log file 为日志文件名 2 程序输出内容如下所示 源 IP 地址 源 MAC 地址 目的 IP 地址 目的 MAC 地址 操作 时间 各部分的说明如下所示 源 IP 地址 输出 ARP 消息格式中的源 IP 地址字段 源 MAC 地址 输出 ARP 消息格式中的源物理地址字段 目的 IP 地址 输出 ARP 消息格式中的目的 IP 地址字段 目的 MAC 地址 输出 ARP 消息格式中的目的物理地址字段 操作 输出 ARP 消息格式中的操作字段 若为 ARP 请求 则为 1 若为 ARP 应答 则为 2 时间 该 ARP 包产生的时间 3 当程序接收到键盘输入 Ctrl C 时字段退出 沈阳理工大学课程设计专用纸 No3 沈阳理工大学 3相关知识相关知识 1 1 什么是什么是 ARPARP 地址解析协议 Address Resolution Protocol ARP 是在仅知道主机的 IP 地址时确定其物理地址的一种协议 因 IPv4 和以太网的广泛应用 其主要 用作将 IP 地址翻译为以太网的 MAC 地址 但其也能在 ATM 和 FDDIIP 网络中 使用 从 IP 地址到物理地址的映射有两种方式 表格方式和非表格方式 ARP 具体说来就是将网络层 IP 层 也就是相当于 OSI 的第三层 地址解析 为数据连接层 MAC 层 也就是相当于 OSI 的第二层 的 MAC 地址 在以太网协议中规定 同一局域网中的一台主机要和另一台主机进行直 接通信 必须要知道目标主机的 MAC 地址 而在 TCP IP 协议栈中 网络层 和传输层只关心目标主机的 IP 地址 这就导致在以太网中使用 IP 协议时 数据链路层的以太网协议接到上层 IP 协议提供的数据中 只包含目的主机的 IP 地址 于是需要一种方法 根据目的主机的 IP 地址 获得其 MAC 地址 这就是 ARP 协议要做的事情 所谓地址解析 address resolution 就是主机 在发送帧前将目标 IP 地址转换成目标 MAC 地址的过程 另外 当发送主机和目的主机不在同一个局域网中时 即便知道目的主 机的 MAC 地址 两者也不能直接通信 必须经过路由转发才可以 所以此 时 发送主机通过 ARP 协议获得的将不是目的主机的真实 MAC 地址 而是 一台可以通往局域网外的路由器的某个端口的 MAC 地址 于是此后发送主 沈阳理工大学课程设计专用纸 No4 沈阳理工大学 机发往目的主机的所有帧 都将发往该路由器 通过它向外发送 这种情况 称为 ARP 代理 ARP Proxy 2 ARP 数据报的消息格式数据报的消息格式 网络上的每台主机或设备都有一个或多个 IP 地址 IP 地址是网络层的 地址 在网络层 数据被组装成 IP 包 但是发送 IP 包需要物理设备的支持 通常是 Ethernet 设备 在本课程设计中我们指定为 Ethernet 设备 即发送 端必须知道目的物理地址才能将 IP 包发送出去 所以需要一种将 IP 地址映 射为物理地址的机制 ARP 协议就是用来完成这个任务的 ARP 协议能够在 同一个物理网络中 在给定目的主机或设备的 IP 地址的条件下 得到目的主 机或设备的物理地址 ARP 协议的数据包格式如图所示 0 8 16 24 31 位 硬件类型 协议类型 物理地址长度协议地址长度 操作 源物理地址 八位组 0 3 源物理地址 八位组 4 5 源 IP 地址 八位组 0 1 源 IP 地址 八位组 2 3 目的物理地址 八位组 0 1 目的物理地址 八位组 2 5 目的 IP 地址 八位组 0 3 ARP 数据包的消息格式 下面对数据包的各个部分进行说明 沈阳理工大学课程设计专用纸 No5 沈阳理工大学 硬件类型 指定硬件接口类型 例如 值为 1 表示 Ethernet 协议类型 指定发送方支持的上层协议的类型 物理地址长度 指定物理 硬件 地址的长度 协议地址长度 网络层协议的地址长度 若为 IP 协议 其值为 4 操作 指定 ARP 的操作类型 例如 1 表示 ARP 请求 2 表示 ARP 应答 源物理地址 指定发送方的 IP 地址 目的物理地址 指定目的物理地址 目的 IP 地址 指定目的 IP 地址 ARP 分组必须在数据链路层中被封装成侦 才能发送出去封装形式如图 所示 将 ARP 数据包封装成一个帧 3 ARP 协议的工作流程 协议的工作流程 1 在发送一个 ARP 分组之前 源主机首先根据目的 IP 地址 在本地 ARP 高速缓存表中查找与之对应的目的物理地址 如果找到对应的物理地址 就不用进行地址解析 否则需要进行地址解析 2 实现地址解析的第一步是产生 ARP 请求分组 在相应的字段写入本地主 机的源物理地址 源 IP 地址 在目的物理地址字段写入 0 并在操作字 ARP 消息 帧头部 帧数据 沈阳理工大学课程设计专用纸 No6 沈阳理工大学 段写入 1 3 将 ARP 分组发送到本地的数据链路层 并封装成帧 以源物理地址作为 源地址 以物理广播地址 FF FF FF FF FF FF 作为目的地址 通过物 理层发送出去 4 由于采用了广播地址 因此网段内所有的主机或设备都能接受到该帧 除了目的主机外 所有接受到该分组的主机和设备都会丢弃该分组 因 为目的主机能够识别 ARP 消息中的目的 IP 地址 5 目的主机发送 ARP 应答分组 在 ARP 应答分组中 以请求分组中源物理 地址 源 IP 地址作为其目的物理地址 目的 IP 地址 并将目的主机自身 的物理地址 IP 地址填入应答分组的源物理地址 源 IP 地址字段 并在 操作字段中写入 2 该分组通过数据链路层以点对点的方式发送出去 因 为现在目的方已经知道双方的物理地址 6 源结点接收到 ARP 应答分组 知道对应于目的 IP 地址的目的物理地址 将它作为一条新记录加入到 ARP 高速缓存表 源结点将有完整源 IP 地址 源物理地址 目的 IP 地址 目的物理地址的信 息和数据作为一个发送分组 传送给它的数据链路层并封装成桢 然后以点 对点的方式发送到目的主机 4课程设计分析课程设计分析 1 课程设计中的重点及难点课程设计中的重点及难点 1 程序中会用到 Winpcap Winpcap 是 Win32 环境下数据包捕获的开放 代码函数库 基于 Winpcap 的应用程序一般按照下面几个步骤进行设 沈阳理工大学课程设计专用纸 No7 沈阳理工大学 计 输出网卡设备列表 选择网卡并打开 捕获数据包时 可能需要设置过滤器 捕获数据包或者发送数据包 2 在程序设计过程中需要注意网络 主机字节顺序的转化 由于不同的 计算机系统所采用的数据表示方式不同 对于 2B 或 4B 的数据 有的 采用低字节地址存放数据的高权值位 而有的却以低地址字节存放数 据低权位值 在网络的数据传输中 我们应该统一表示 所以我们在 捕获数据包后 应将数据包头部的表示长度或类型的数据转换成本地 机的表达形式 可以利用函数 ntohs 将网络字节序转换为主机字节序 3 选择网卡并打开时 注意选择可用的网卡 2 参考算法参考算法 1 取得当前网卡设备列表 2 选择 Ethernet 网卡并打开 注意判断所选网卡是否为实际存在的可用 网卡 3 设置过滤器 此处的过滤器正则表达式为 arp 或者 ether proto arp 4 捕获数据包并进行处理 包括输出各 IP 地址 物理地址 操作类型以 及时间 由于要记录日志文件 为了便于输出流参数 建议采用 沈阳理工大学课程设计专用纸 No8 沈阳理工大学 pcap next ex 函数 流程图如图所示 5程序代码程序代码 include include include include pcap h include pragma comment lib ws2 32 lib pragma comment lib wpcap lib 定义 ARP 包数据 struct arppkt unsigned short hdtyp 硬件类型 开始 获取网卡列表 选取 Ethernet 网卡 打开网卡 混杂模式 编译设置过滤器 捕获 ARP 包并将其相应内 容输出 沈阳理工大学课程设计专用纸 No9 沈阳理工大学 unsigned short protyp 协议类型 unsigned char hdsize 硬件地址长度 unsigned char prosize 协议地址长度 unsigned short op 操作类型 操作值 ARP RARP u char smac 6 源 MAC 地址 u char sip 4 源 IP 地址 u char dmac 6 目的 MAC 地址 u char dip 4 目的 IP 地址 void packet handler const pcap pkthdr header const u char pkt data ostream 输出源 IP 地址 for int i 0 i 3 i out sip i out setf ios left out setw 3 sip 3 out unsetf ios left 输出源 MAC 地址 char oldfillchar out fill 0 out setf ios uppercase for i 0 i 5 i out hex setw 2 smac i out hex setw 2 smac 5 out fill oldfillchar out unsetf ios hex ios uppercase 输出目的 IP 地址 for i 0 i 3 i out dip 3 out unsetf ios left out setw 3 dip 3 out unsetf ios left 输出目的 MAC 地址 out fill 0 out setf ios uppercase for i 0 i 5 i out hex setw 2 dmac i out hex setw 2 dmac 5 out fill oldfillchar out unsetf ios hex ios uppercase 输出操作类型 out op ts tv sec out fill 0 out tm hour setw 2 tm min setw 2 tm sec out fill oldfillchar out endl void main int argc char argv 命令行参数 检查输入命令格式 if argc 2 cout Please input command ParseArp output file endl return 初始化网络设备相关参数 pcap if t alldevs pcap if t d pcap t adhandle char errbuf PCAP ERRBUF SIZE u int netmask char packet filter ether proto arp struct bpf program fcode struct pcap pkthdr header const u char pkt data 获取网络设备列表 if pcap findalldevs if d NULL cout addresses netmask sin addr S un S addr 编译过滤器 只捕获 ARP 包 if pcap compile adhandle pcap freealldevs alldevs return 设置过滤器 if pcap setfilter adhandle pcap freealldevs alldevs return 显示提示信息及每项含义 cout listening on description endl endl ofstream fout argv 1 ios app 日志记录文件 为了查看日志时的方便 其中加入了日期记录 time t t time fout seekp 0 ios end if fout tellp 0 fout endl fout t tARP request 1 reply 2 on ctime cout Sour Ip Addr Sour MAC Address Des Ip Addr Des MAC Address OP Time endl fout Sour Ip Addr Sour MAC Address Des Ip Addr Des MAC Address OP Time 0 循环解析 ARP 数据包 if result 0 continue 解析 ARP 包 结果输出到屏幕与文件 packet handler header pkt data cout packet handler header pkt data fout 6运行结果与分析运行结果与分析 相关扩展与分析 相关扩展与分析 本课程设计还可以在 Linux 环境下用 rawsocket 完成 算法和代码提示 1 调用 socket 打开协议簇为 PF PACKET 的原始套接字 这样我们就可以收到数据链路帧 int fd socket PF PACKET SOCK RAM htons ETH P ALL 2 对打开的套接字调用 ioct1 将网卡设置为混杂模式 这样我们就可以接受到局域网中所有的 包 包括目的地址不是本机的帧 struct ifreq req memset strncpy req ifr name eth0 strlen eth0 1 沈阳理工大学课程设计专用纸 No13 沈阳理工大学 ioctl fd SIOCGIFFLAS req ifr flags IFF PROMISC 设置为混杂模式 icotl fd SIOCGIFFLAGS 3 利用 recvfrom 接收包 recvform fd buffer sizeof buffer 0 struct sockaddr 4 接收到包后 判断是否为 ARP 包 若是 ARP 包则进行处理 否则丢弃 If ntohs eth header ether type 0 x0806 ntohs arp header

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论