计算机网络课程设计报告 解析ARP数据包含C++源码

合集下载

计算机网络课程设计

计算机网络课程设计

课程设计(报告)课程名称:计算机网络课程设计学生姓名:学号:150106学部(系):信息科学与技术学部专业年级:计算机科学与技术1503指导教师:鲁丽惠雅位磊2017年9月21日目录第一部分:数据包的分析 (6)一、捕获ARP请求,ARP应答数据包,分析其组成特征。

总结ARP协议运行的基本过程 (6)二、捕获ICMP数据包,对其进行分析研究。

(icmp请求数据包,icmp应答数据包) . 7三、捕获TCP“三次握手”建立连接的数据包并分析;捕获TCP“2次两次握手”释放连接的数据包并分析 (9)a) tcp连接的建立 (9)b) tcp连接的释放 (11)四、捕获HTTP,DNS,DHCP数据包,分析其构成 (12)a)http数据包的捕获与分析 (13)b)DNS数据包的捕获与分析 (14)c)DHCP数据包的捕获与分析 (15)五、通过捕捉smtp协议包捕捉密码 (16)第二部分:完成下列程序 (17)一、编写一个程序,能够根据输入的原始数据,及所选择的多项式,自动生成CRC校验码 (17)第三部分 (19)一、以文华学院为背景,了解文华学院现有校园网络的构成。

主要从网速提高,网络安全,无线网络构建等几个方面进行分析,并提出合理的改进意见 (19)第四部分:参考文献 (40)评语第一部分:数据包的分析一、捕获ARP请求,ARP应答数据包,分析其组成特征。

总结ARP协议运行的基本过程Frame Number(帧的编号):31Frame Length(帧的大小):60字节。

Arrival Time(帧被捕获的日期和时间):sep 7, 2017 15:21:03.795047000Time delta from previous captured frame(帧距离前一个帧的捕获时间差):0.068504000 secondsTime since reference or first frame:2.945039000 secondsDestination(目的地址):(ff:ff:ff:ff:ff:ff)ARP协议运行过程:ARP进程在本局域网上发送ARP请求,目的主机在ARP请求分组里看到自己的IP,就发送一个响应分组,写入自己的硬件地址。

ARP协议分析实验报告

ARP协议分析实验报告

ARP协议分析实验报告ARP(Address Resolution Protocol)协议是一种解决网际协议(IP)地址与物理硬件地址(MAC地址)之间转换的协议。

本次实验旨在分析ARP协议的工作原理和过程,并通过使用网络抓包工具Wireshark来捕获并分析ARP协议的数据包。

1.实验背景与目的2.实验步骤a)搭建网络环境:搭建一个基本的局域网环境,包括一个路由器和几台主机。

b) 启动Wireshark:在一台主机上启动Wireshark网络抓包工具。

c)发送ARP请求:使用另一台主机向目标主机发送ARP请求,获取目标主机的IP地址与MAC地址的对应关系。

d) 抓取数据包:在Wireshark中捕获并保存ARP协议的数据包。

e)分析数据包:打开捕获的数据包,分析数据包中的ARP请求和应答。

3.实验结果与分析实验中,我们使用两台主机进行测试,主机A的IP地址为192.168.1.100,MAC地址为00:11:22:33:44:55,主机B的IP地址为192.168.1.200,MAC地址为AA:BB:CC:DD:EE:FF。

a)ARP请求过程:主机A通过ARP协议发送ARP请求,询问主机B的MAC地址,具体操作为发送一个以太网帧,目标MAC地址为广播地址FF:FF:FF:FF:FF:FF,目标IP地址为主机B的IP地址192.168.1.200。

主机B收到ARP请求后,通过ARP应答将自己的MAC地址发送给主机A。

b)ARP应答过程:主机B收到ARP请求后,生成一个ARP应答数据包,将自己的MAC地址AA:BB:CC:DD:EE:FF作为回应发送给主机A。

主机A接收到ARP应答后,将主机B的IP地址与MAC地址的对应关系存储在本地ARP缓存中,以便于下次通信时直接使用。

4.结论与意义ARP协议作为解决IP地址与MAC地址转换的关键协议,在计算机网络中起着重要的作用。

本实验通过抓包分析ARP协议的工作过程,深入理解了ARP协议的原理和应用场景。

贵州大学计算机网络实验报告-实验五-分析ARP地址解析协议

贵州大学计算机网络实验报告-实验五-分析ARP地址解析协议

实验课程名称计算机网络实验报告实验项目名称分析ARP地址解析协议专业班级电子信息科学与技术08级1班学生姓名学号指导教师理学院实验时间:2010年5月11日实验名称:实验五分析ARP地址解析协议实验目的:掌握ARP协议的作用和格式;理解IP地址与MAC地址的对应关系;了解ARP命令。

实验器材:计算机及以太网环境。

实验内容(步骤):1.打开“命令提示符”窗口,使用“arp -a”命令查看本地计算机ARP高速缓存。

2.使用“arp -d”命令清除本地计算机ARP高速缓存,再使用“arp -a”命令查看。

此时,本地计算机ARP高速缓存只有路由的信息了。

3.打开Wireshark,选择菜单命令“Capture” “I nterfaces…”子菜单项。

弹出“Wireshark:Capture Interfaces”对话框。

单击“Options”按钮,弹出“Wireshark: Capture Options”对话框。

Capture filter字段填入:“arp”,单击“Start”按钮。

4.此时,网络协议分析软件开始捕获数据,在“命令提示符”窗口中PING同一子网中的任意主机。

因为PING命令的参数为IP地址,因此使用PING命令前,需要使用ARP机制将IP地址转换为MAC地址,这个过程用户是无法感知的。

因为我们在使用PING命令前已经开始网络数据包捕获,因此,此时网络协议分析软件将捕获到ARP解析数据包。

5.单击“Stop”按钮,中断网络协议分析软件的捕获进程,主界面显示捕获到的ARP数据包。

6.观察协议树区中ARP数据包结构,是否符合ARP请求或应答的报文格式。

可以在命令提示符窗口使用ipconfig/all命令查看本地计算机的物理网卡地址。

观察第一帧的数据包结构:。

C语言实现ARP攻击(附源码)

C语言实现ARP攻击(附源码)

信息安全原理——ARP攻击班级:07计算机1班姓名:胡益铭学号:E07620112ARP原理:ARP,即地址解析协议,实现通过IP地址得知其物理地址。

在TCP/IP网络环境下,每个主机都分配了一个32位的IP地址,这种互联网地址是在网际范围标识主机的一种逻辑地址。

为了让报文在物理网路上传送,必须知道对方目的主机的物理地址。

这样就存在把IP 地址变换成物理地址的地址转换问题。

以以太网环境为例,为了正确地向目的主机传送报文,必须把目的主机的32位IP地址转换成为48位以太网的地址。

这就需要在互连层有一组服务将IP地址转换为相应物理地址,这组协议就是ARP协议。

ARP数据报格式如下:什么是ARP欺骗:其实,此起彼伏的瞬间掉线或大面积的断网大都是ARP欺骗在作怪。

ARP欺骗攻击已经成了破坏网吧经营的罪魁祸首,是网吧老板和网管员的心腹大患。

从影响网络连接通畅的方式来看,ARP欺骗分为二种,一种是对路由器ARP表的欺骗;另一种是对内网PC的网关欺骗。

第一种ARP欺骗的原理是——截获网关数据。

它通知路由器一系列错误的内网MAC地址,并按照一定的频率不断进行,使真实的地址信息无法通过更新保存在路由器中,结果路由器的所有数据只能发送给错误的MAC地址,造成正常PC无法收到信息。

第二种ARP欺骗的原理是——伪造网关。

它的原理是建立假网关,让被它欺骗的PC向假网关发数据,而不是通过正常的路由器途径上网。

在PC看来,就是上不了网了,“网络掉线了”。

本程序基于C语言,利用winpacp实现往局域网内发自定义的包,以达到ARP欺骗的目的。

首先从/archive/下载4.0beta1-WpdPack和4.0beta1-WinPcap.exe,版本很多,不过最新版本需要64位的系统,本人32位系统用不了。

直接点击4.0beta1-WinPcap.exe安装,然后在C:\Program Files\WinPcap下打开rpcapd.exe 服务。

arp数据包课程设计

arp数据包课程设计

arp数据包课程设计一、课程目标知识目标:1. 学生能理解ARP协议的基本原理和ARP数据包的结构;2. 学生能掌握ARP数据包在网络通信中的作用和重要性;3. 学生能了解ARP欺骗和防护措施。

技能目标:1. 学生能够使用抓包工具捕获和分析ARP数据包;2. 学生能够配置网络设备以防止ARP欺骗;3. 学生能够运用所学知识解决简单的网络通信故障。

情感态度价值观目标:1. 培养学生对计算机网络通信的兴趣和好奇心;2. 增强学生的网络安全意识,使其养成良好的网络行为习惯;3. 培养学生合作学习、积极探索的精神。

课程性质:本课程为计算机网络通信领域的实践性课程,旨在帮助学生掌握ARP数据包的相关知识,提高实际操作能力。

学生特点:本课程针对的是高年级学生,他们已经具备一定的计算机网络知识基础,对实际操作和案例分析有较高的兴趣。

教学要求:结合学生特点和课程性质,注重理论与实践相结合,通过案例分析和实际操作,使学生更好地理解和掌握ARP数据包的相关知识。

在教学过程中,注重培养学生的实际操作能力和网络安全意识。

课程目标分解为具体的学习成果,以便后续的教学设计和评估。

二、教学内容1. 引言:回顾计算机网络基础知识,引出ARP协议的作用和重要性。

教材章节:第一章 计算机网络基础2. ARP协议原理:- ARP数据包的结构与工作流程;- ARP缓存的更新机制。

教材章节:第二章 网络层协议3. ARP数据包分析:- 使用抓包工具捕获ARP数据包;- 分析ARP请求和应答数据包。

教材章节:第三章 网络协议分析4. ARP欺骗与防护:- ARP欺骗原理及常见攻击方式;- 防护措施及配置方法。

教材章节:第四章 网络安全5. 实际操作与案例分析:- 配置网络设备防止ARP欺骗;- 分析实际网络通信故障案例。

教材章节:第五章 网络设备配置与案例分析6. 总结与拓展:- 总结ARP数据包相关知识;- 探讨ARP协议在物联网等新兴领域的应用。

解析ARP数据包软件设计与实现

解析ARP数据包软件设计与实现

解析A R P数据包软件设计与实现IMB standardization office【IMB 5AB- IMBK 08- IMB 2C】JISHOU UNIVERSITY专业课课程论文题目:解析ARP数据包作者:学号:所属学院:信息科学与工程学院专业年级:总评分:完成时间:吉首大学信息科学与工程学院解析ARP数据包软件的设计和实现(吉首大学信息科学与工程学院,湖南吉首 416000)摘要本文首先介绍了地址解析协议ARP的概念,详细说明了ARP的工作原理,ARP攻击的基本原理,详细分解了ARP数据包的各个字段含义,ARP协议工作的流程和这次课程设计的意义与目的;接着描述了此实验的总体设计;然后是详细设计,分析讲解了实现代码的主要部分;最后还讲了做这次课程设计的个人总结,谈了一些个人观点。

关键字:ARP数据包、工作原理、ARP攻击、解析、截获、功能目录第一章引言1.1ARP背景首先,我们来了解一下什么是ARP,ARP的工作原理以及ARP攻击所带来的危害。

什么是ARP地址解析协议(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地址。

计算机网络课程设计报告

计算机网络课程设计报告

计算机网络课程设计华中科技大学信息学部软件姓名:专业班级:学号:指导老师:目录一、课程的性质、目的和任务 (3)二、课程内容和基本要求 (3)(一)、协议包的分析,网络协议的组成 (3)1、捕获ARP请求,ARP应答数据包 (3)2、捕获ICMP数据包,对其进行分析研究 (4)3、捕获TCP“三次握手”“2次两次握手”释放连接数据包 (6)4、捕获HTTP,DNS,DHCP数据包,分析其构成 (10)5、通过捕捉smtp协议包捕捉邮箱密码 (15)小结 (15)(二)、编写一个程序自动生成CRC校验码 (15)程序代码: (15)编译运行 (16)(三)、机架实验 (17)小结 (17)(四)、模拟学校校园网 (17)校园网拓扑图 (17)网络测试 (18)小结 (22)一、课程的性质、目的和任务该课程为实践类课程。

通过本课程,(1)学生需要深入理解网络协议的组成,对网络中传输数据的过程有更深入的认识。

(2)学生需要了解计算机网络工程设计的一般任务,明确计算机网络设计与建设的基本原则,熟悉计算机网络需求分析的目标、任务与方法,掌握计算机网络设计的通用方法,并学会撰写规范的计算机网络方案书。

二、课程内容和基本要求(一)、协议包的分析,网络协议的组成1、捕获ARP请求,ARP应答数据包,分析其组成特征。

总结ARP协议运行的基本过程。

本机(192.168.84.69)ping目的主机(192.168.84.39):抓包截图:本机192.168.84.69 源MAC地址 c8:9c:dc:59:39:30目的主机 192.168.84.39 目的MAC地址 c8:9c:dc:5a:2b:57ARP协议运行过程:ARP进程在本局域网上发送ARP请求,目的主机在ARP 请求分组里看到自己的IP,就发送一个响应分组,写入自己的硬件地址。

2、捕获ICMP数据包,对其进行分析研究。

(icmp请求数据包,icmp应答数据包)Ping 进行ICMP数据包截获ICMP请求数据包:TYPE:8CODE:0 CHECKSUM :0X225CICMP应答数据包:TYPE:0CODE:0CHECKSUM :0X2A5CICMP协议数据包对IP分组在传送时出现的异常情况进行报告,对IP报文传输时出现的差错、拥塞、路由改变、以及路由器或主机信息的获取等情况,向源端主机提交报告,由源主机采取相应措施,改进传输质量。

arp编程课程设计

arp编程课程设计

arp编程课程设计一、课程目标知识目标:1. 了解ARP协议的基本原理和作用;2. 掌握ARP编程的基本流程和关键步骤;3. 理解网络通信中IP地址与MAC地址的映射关系;4. 学会使用编程语言实现ARP请求和响应的发送与接收。

技能目标:1. 能够运用所学知识编写简单的ARP编程实例;2. 培养独立分析和解决网络通信中ARP相关问题的能力;3. 提高实际操作和动手实践能力,熟练使用相关网络工具。

情感态度价值观目标:1. 培养对计算机网络编程的兴趣和热情;2. 树立良好的网络道德观念,遵循网络通信协议,维护网络安全;3. 增强团队协作意识,培养沟通与表达能力。

课程性质:本课程为计算机网络编程的实践课程,以ARP编程为主题,旨在帮助学生掌握网络编程的基本技能。

学生特点:学生具备一定的计算机网络基础知识和编程能力,对网络编程有一定兴趣。

教学要求:注重理论与实践相结合,鼓励学生动手实践,培养实际编程能力。

通过本课程的学习,使学生能够独立完成简单的ARP编程任务,并解决实际网络通信中的问题。

教学过程中,将目标分解为具体的学习成果,以便进行教学设计和评估。

二、教学内容1. 引言:计算机网络概述,ARP协议的基本概念和作用;教材章节:第一章 计算机网络基础,第三节 网络协议与标准。

2. ARP协议原理:- IP地址与MAC地址的映射关系;- ARP请求与响应的发送与接收过程;教材章节:第二章 网络层,第二节 地址解析协议。

3. ARP编程基础:- 编程语言选择:C或Python;- ARP编程的基本流程和关键函数;教材章节:第五章 网络编程,第二节 地址解析协议编程。

4. 实例分析:- 分析典型的ARP编程实例,理解其工作原理;- 课堂演示,学生跟随操作;教材章节:第五章 网络编程,第三节 网络编程实例。

5. 动手实践:- 布置简单的ARP编程任务,如发送ARP请求、接收ARP响应;- 学生分组实践,互相交流,解决问题;教材章节:第五章 网络编程,第四节 网络编程实验。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计任务书目录1.课程设计目的 (2)2.课程设计要求 (2)3.相关知识 (2)1)ARP数据报的消息格式 (3)2)ARP协议的工作流程 (4)4.课程设计分析 (5)1)课程设计中的重点及难点 (5)2)参考算法 (6)3)核心代码 (7)5.相关扩展 (8)6.心得体会 (10)7.参考文献 (11)一、课程设计目的:本课程设计的目的是对网络上的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时字段三、相关知识a)ARP数据报的消息格式网络上的每台主机或设备都有一个或多个IP地址。

IP地址是网络层的地址,在网络层,数据被组装成IP包。

但是发送IP包需要物理设备的支持(通常是Ethernet设备,在本课程设计中我们指定为Ethernet设备),即发送端必须知道目的物理地址才能将IP包发送出去,所以需要一种将IP地址映射为物理地址的机制。

ARP协议就是用来完成这个任务的。

ARP协议能够在同一个物理网络中,在给定目的主机或设备的IP地址的条件下,得到目的主机或设备的物理地址。

ARP协议的数据包格式如图所示:ARP数据包的消息格式下面对数据包的各个部分进行说明●硬件类型:指定硬件接口类型。

例如,值为1表示Ethernet●协议类型:指定发送方支持的上层协议的类型●物理地址长度:指定物理(硬件)地址的长度●协议地址长度:网络层协议的地址长度。

若为IP协议,其值为4●操作:指定ARP的操作类型,例如,1表示ARP请求,2表示ARP应答●源物理地址:指定发送方的IP地址●目的物理地址:指定目的物理地址。

●目的IP地址:指定目的IP地址ARP分组必须在数据链路层中被封装成侦,才能发送出去封装形式如图所示b)ARP协议的工作流程。

1)在发送一个ARP分组之前,源主机首先根据目的IP地址,在本地ARP高速缓存表中查找与之对应的目的物理地址。

如果找到对应的物理地址,就不用进行地址解析,否则需要进行地址解析。

2)实现地址解析的第一步是产生ARP请求分组。

在相应的字段写入本地主机的源物理地址、源IP地址,在目的物理地址字段写入0,并在操作字段写入1。

3)将ARP分组发送到本地的数据链路层,并封装成帧。

以源物理地址作为源地址,以物理广播地址(FF-FF-FF-FF-FF-FF)作为目的地址,通过物理层发送出去。

4)由于采用了广播地址,因此网段内所有的主机或设备都能接受到该帧。

除了目的主机外,所有接受到该分组的主机和设备都会丢弃该分组,因为目的主机能够识别ARP 消息中的目的IP地址。

5)目的主机发送ARP应答分组。

在ARP应答分组中,以请求分组中源物理地址、源IP地址作为其目的物理地址、目的IP地址,并将目的主机自身的物理地址、IP地址填入应答分组的源物理地址、源IP地址字段,并在操作字段中写入2。

该分组通过数据链路层以点对点的方式发送出去(因为现在目的方已经知道双方的物理地址)。

6)源结点接收到ARP应答分组,知道对应于目的IP地址的目的物理地址,将它作为一条新记录加入到ARP高速缓存表。

7)源结点将有完整源IP地址、源物理地址、目的IP地址、目的物理地址的信息和数据作为一个发送分组,传送给它的数据链路层并封装成桢,然后以点对点的方式发送到目的主机。

四、课程设计分析1.课程设计中的重点及难点1)程序中会用到Winpcap,Winpcap是Win32环境下数据包捕获的开放代码函数库。

基于Winpcap的应用程序一般按照下面几个步骤进行设计:●输出网卡设备列表。

●选择网卡并打开。

●捕获数据包时,可能需要设置过滤器。

●捕获数据包或者发送数据包。

2)在程序设计过程中需要注意网络—主机字节顺序的转化。

由于不同的计算机系统所采用的数据表示方式不同,对于2B或4B的数据,有的采用低字节地址存放数据的高权值位,而有的却以低地址字节存放数据低权位值,在网络的数据传输中,我们应该统一表示,所以我们在捕获数据包后,应将数据包头部的表示长度或类型的数据转换成本地机的表达形式。

可以利用函数ntohs()将网络字节序转换为主机字节序。

3)选择网卡并打开时,注意选择可用的网卡。

2.参考算法1)取得当前网卡设备列表。

2)选择Ethernet网卡并打开,注意判断所选网卡是否为实际存在的可用网卡。

3)设置过滤器,此处的过滤器正则表达式为“arp”或者“ether proto\\arp”。

4)捕获数据包并进行处理(包括输出各IP地址,物理地址,操作类型以及时间)。

由于要记录日志文件,为了便于输出流参数,建议采用pcap_next_ex()函数。

流程图如图所示:3.核心代码●ARP数据包结构struct arppkt{unsigned short hdtyp; //硬件类型。

值0001表示其为Ethernetunsigned short protyp; //协议类型。

值0800表示上层协议为IPunsigned char hdsize; //硬件地址长度。

值为06unsigned char prosize; //协议地址长度。

值为04unsigned short op; //操作值为0001/0002,分别表示ARP请求/应答u_char smac[6]; //源MAC地址,6Bu_char sip[4]; //源IP地址,4Bu_char dmac[6]; //目的MAC地址u_char dip[4]; //目的IP地址};●获取网络设备列表,并以混杂模式打开网络设备//获取网络设备列表if(pcap_findalldevs(&alldevs,errbuf)==-1){cout<<"Error 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){cout<<"\nUnable to open the adapter.";pcap_freealldevs(alldevs); //释放设备列表return;}if(pcap_datalink(adhandle)==DLT_EN10MB&&d->addresses!=NULL)break;}●编译过滤器并设置过滤器,只捕获ARP数据包char packet_filter[]=”ether proto \\arp”; //过滤,选择arp协议if(pcap_compile(adhandle,&fcode,packet_filter,1,netmask)<0){ cout<<"\nUnable to compile the packet filter.Check the syntax.\n";pcap_freealldevs(alldevs);return;}//设置过滤器if(pcap_setfilter(adhandle,&fcode)<0){ cout<<"\nError setting the filter.\n";pcap_freealldevs(alldevs);return;}●循环捕获ARP包,并进行解析while((result=pcap_next_ex(adhandle,&header,&pkt_data))>=0){输出ARP数据包的各个域的内容到文件和屏幕上}●源程序#include<winsock2.h>#pragma comment(lib,"Ws2_32.lib") //用到ntobs()//等同于点击"project-setting-link"打开object/library module编辑框后加入文件#pragma comment(lib,"wpcap.lib")#include "pcap.h" //此头文件没有包含在VC中,需要另外加入#include<fstream.h>#include<iomanip.h> //格式化输出需要用到#include<conio.h> //用到_getch()//注意到接收的数据包头中代表类型,数据长度的字段采用的是big-endian//所以对于2B/4B的数据要用ntohs()转换为本机形式//ARP包结构struct arppkt{unsigned short hdtyp; //硬件类型.值0001unsigned short protyp;unsigned char hdsize;unsigned char prosize;unsigned short op;u_char smac[6];u_char sip[4];u_char dmac[6];u_char dip[4];};void packet_handler(const pcap_pkthdr *header,const u_char *pkt_data,ostream& out); void main(int argc,char *argv[ ]){if(argc!=2){cout<<"Usage:arpparse logfilename"<<endl;cout<<"press any key to continue."<<endl;_getch();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(&alldevs,errbuf)==-1){cout<<"Error in pcap_findalldevs:"<<errbuf;return;}for(d=alldevs;d;d=d->next){if((adhandle=pcap_open_live(d->name,1000,1,300,errbuf))==NULL){cout<<"\nUnable to open the adapter.";pcap_freealldevs(alldevs);return;}if(pcap_datalink(adhandle)==DLT_EN10MB&&d->addressess!=NULL) break;}if(d==NULL){cout<<"\nNo interfaces found! Make sure Winpcap is installed.\n";return;}//获得子网掩码netmask=((sockaddr_in *)(d->netmask))->sin_addr.s_un.s_addr;//编译过滤器,只捕获ARP包if(pcap_compile(adhandle,&fcode,packet_filter,1,netmask)<0){ cout<<"\nUnable to compile the packet filter.Check the syntax.\n"; pcap_freealldevs(alldevs);return;}//设置过滤器if(pcap_setfilter(ashandle,&fcode)<0){ cout<<"\nError setting the filter.\n";pcap_freealldevs(alldevs);return;}cout<<"\t\tlistening on "<<d->description<<"..."<<endl<<endl;//显示提示信息及每项含义ofstream fout(argv[1],ios::app); //日志记录文件//为了查看日志时的方便,其中加入了日期记录time_t t;time(&t);fout.seekp(0,ios::end);if(fout.tellp()!=0)fout<<endl;fout<<"\t\tARP request(1)/reply(2) on"<<ctime(&t);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"<<endl;//释放设备列表pcap_freealldevs(alldevs);int result;while((result=pcap_next_ex(adhandle,&header,&pkt_data))>=0){if(result==0)continue;packer_handler(header,pkt_data,cout);packet_handler(header,pkt_data,fout);}}void packet_handler(const pcap_pkthdr *header,const u_char *pkt_data,ostream& out){arpkt* arph = (arppkt *)(pkt_data +14);for(int i=0;i<3;i++)out<<int(arph->sip[i])<<'.';out.setf(ios::left);out<<setw(3)<<int(arph->sip[3])<<" ";out.unsetf(ios::uppercase);for(i=0;i<5;i++)out<<hex<<setw(2)<<int(arph->smac[i])<<'-';out<<hex<<setw(2)<<int(arph->smac[5])<<" ";out.fill(oldfillchar);out.unsetf(ios::hex|ios::uppercase);for(i=0;i<3;i++)out<<int(arph->dip[3])<<'.';out.unsetf(ios::left);//输出目的MAC地址out.fill('0');out.setf(ios::uppercase);for(i=0;i<5;i++)out<<hex<<setw(2)<<int(arph->dmac[i])<<'-';out.fill(oldfillchar);out.unsetf(ios::hex|ios::uppercase);out<<ntohs(arph->op)<<" ";struct tm *ltime;ltime=localtime(&header->_sec);out.fill('0');out<<ltime->tm_hour<<':'<<setw(2)<<ltime->tm_min<<':'<<setw(2)<<ltime->tm_sec;out.fill(oldfillchar);out<<endl;}五、相关扩展本课程设计还可以在Linux环境下用rawsocket完成。

相关文档
最新文档