使用 scapy 作为 MITM 即时更改数据包

2024-01-25

假设我设法处于客户端和服务器之间的通信中间(假设我打开一个热点并导致客户端仅通过我的机器连接到服务器)。

如何更改客户端发送和接收的数据包而不中断我自己与其他服务的通信?必须有一种方法可以通过我的脚本路由客户端发送和即将接收(在将它们转发给他之前)的所有数据包。

我认为实现这一目标的正确方向是iptables但不确定到底什么论点适合使这项工作有效。我已经有了以下简单的脚本:

hotspotd start #a script that runs dnsmasq as both a DNS and DHCP server, configures and starts a hotspot
iptables -P FORWARD ACCEPT
iptables --append FORWARD --in-interface wlan0 -j ACCEPT
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE 
#wlan0 is the interface on which the hotspot is.
#eth0 is the interface that is connected to the internet

现在,这对于被动 MITM 来说非常有效 - 我可以看到客户端发送和接收的所有内容。但现在我想更进一步,重定向他通过我发送和接收的每条消息。

我的最终目的是达到可以执行以下脚本的级别:

from scapy.all import *
from scapy_http.http import *

def callback(pkt):
   #Process the packet here, see source and destination addresses, ports, data
   send(pkt)

sniff(filter='port 666', prn=callback) #Assuming all relevant packets are redirected to port 666

如何完成重定向客户端发送和即将接收的每个数据包?


您可以使用NFQUEUE http://www.netfilter.org/projects/libnetfilter_queue/doxygen/其中有python 绑定 https://pypi.python.org/pypi/NetfilterQueue.

NFQUEUE 是一个用户空间队列,它是有效的 iptables 目标。您可以将一些流量重定向到 NFQUQUE:

iptables -I INPUT -d 192.168.0.0/24 -j NFQUEUE --queue-num 1

然后从您的代码访问数据包:

from netfilterqueue import NetfilterQueue

def print_and_accept(pkt):
    print(pkt)
    pkt.accept()

nfqueue = NetfilterQueue()
nfqueue.bind(1, print_and_accept)
try:
    nfqueue.run()
except KeyboardInterrupt:
    print('')

nfqueue.unbind()

请注意pkt.accept()称呼。这会返回一个verdict http://www.netfilter.org/projects/libnetfilter_queue/doxygen/group__Queue.html#gae36aee5b74d0c88d2f8530e356f68b79到 nfqueue,告诉它应该接受数据包 - 即允许它继续沿着内核中的正常路线前进。要修改数据包,而不是accepting它,你需要复制它,返回一个drop判决,最后重新发送包含修改的内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 scapy 作为 MITM 即时更改数据包 的相关文章

随机推荐

  • 工厂方法模式与多处理队列的使用冲突

    我已经实现了工厂方法模式来参数化产品类的基类 def factory ParentClass class Wrapper ParentClass attr foo def wrapped method Do things to be don
  • 使用 PEM PrivateKey 签署字符串

    我有一个 PEM 编码的私钥 我需要用它签署一个字符串 但代码不断崩溃 出现异常 java security spec InvalidKeySpecException java lang RuntimeException error 0c0
  • 具有多个 Active Directory 服务器的 Grails Spring Security LDAP 插件

    我有 Grails Spring Security 插件连接到一台 Active Directory 服务器 没有任何问题 但是 我需要连接到多个服务器 我们在一台 AD 服务器上有一些用户 在另一台服务器上有其他用户 因此我们需要尝试在两
  • 内存转储比可用内存小得多

    我有一个 Tomcat 应用程序服务器 配置为在 OOM 上创建内存转储 并且以 Xmx1024M 启动 因此应该有千兆字节可供他使用 现在我找到了一个这样的转储 它只包含 260MB 的未保留内存 垃圾场怎么可能比他应有的可用大小小得多
  • SonarQube 规则鱿鱼:S1451 应定义版权和许可证标头

    我的所有 SonarQube 代码分析 Java 项目都未能遵循此规则 每个源文件都应以标头开头 说明文件所有权以及分发应用程序必须使用的许可证 此规则必须包含每个文件开头所需的标题文本 有一个参数 headerFormat 预期的版权和许
  • gnuplot 坐标系之间的转换

    TL DR 有没有办法在多图设置中对齐不同图的角 有没有办法转换axis坐标到screen坐标 详细解释 我正在尝试使用 gnuplot 布局一个相当复杂的画布 为了实现我想要的 我需要将不同的图精确地堆叠在一起 我做了类似的事情 rese
  • 使用replicate()或sapply()重复用户定义的函数

    我定义了一个自定义函数 如下所示 my fun function for i in 1 1000 for j in 1 20 return output 它返回一个输出矩阵 output 由 1000 行和 20 列组成 我需要做的是重复该
  • YouTube API:API 说它是可嵌入的且未被阻止,但当它嵌入时,它会被阻止

    我想知道是否有人遇到过这个问题 我正在尝试嵌入 The Killers Human 音乐视频 当我执行 API feed 请求时 如下所示 这表明视频是可嵌入的并且没有被阻止 它甚至声明您可以使用以下 URL 嵌入 然而 当我尝试此操作并播
  • 当键不统一时,如何在不使用 Pandas 的情况下从嵌套字典绘制条形图?

    我有一个像这样的嵌套字典 uvvm 0 250ms 96 500 750ms 2 usvv 0 250ms 1 unsharedChunksVirtualVolume 0 250ms 21 ubvv 0 250ms 60 250 500ms
  • React-intl,将 api 与 Typescript 结合使用

    我想使用formatMessage的功能react intlAPI 插入消息作为占位符 但我无法找出访问此函数的正确方法 这是我所拥有的简化版本 index tsx
  • 如何使用 wxPython 布局 3 窗格窗口?

    我正在尝试找到一种使用 wxPython 布局 3 窗格窗口的简单方法 我想在左窗格中有一个树列表 然后有一个分为两部分的右窗格 顶部有一个编辑组件 底部有一个网格组件 大致如下 Edit Tree Control Control
  • 使用 schtasks.exe 指定计划任务的运行目录

    我有一个由计划任务调用的应用程序 它从 Windows Server 2003 迁移到 Windows Server 2008 在 2003 年 该应用程序在可执行文件所在的目录中运行 2008年Environment CurrentDir
  • 升压 lambda 示例

    我创建了一张地图作为解决方案的一部分 enum Opcode OpFoo OpBar OpQux this should be a pure virtual abstract base class class Operation class
  • 单个键具有多个值的哈希表

    我想在单个键中存储多个值 例如 HashTable obj new HashTable obj Add 1 test obj Add 1 Test1 现在这会引发错误 你可以把你的test test1 test2 放在一个表中 然后将该表放
  • 聚合为一个实体

    在领域驱动设计中 如果我想使用存储库 我需要有一个聚合 据我所知 所以我有一个用户 它有 ID 登录名 电子邮件和密码 用户是具有唯一ID的域实体 当我想将用户添加到用户存储库时 我是否应该首先构建一个仅包含我的用户实体的聚合根的聚合 在这
  • 如何为自定义类创建 println/print 方法

    我正在使用 Java 开发一个项目 如果您愿意的话 该项目需要我制作一些 容器 类 这是其中一个的简单版本 public class Pair Object KEY Object VALUE public Pair Object k Obj
  • 将 XAMPP 文件夹移至新计算机,现在在尝试启动 MySQL 时收到“(XAMPPErrorDomain error 1.)”

    我最近不得不在 MacBook 上从头开始重新安装 Lion 我保存了 XAMPP 文件夹并将其移至新安装中的应用程序文件夹中 我可以启动 Apache 但不能启动 MySQL 我收到此错误 The operation couldn t b
  • 将 JSON 数据映射到 jqGrid

    下面的代码创建一个 javascript 对象 将其转换为 JSON 并尝试将其加载到 jqGrid 中 我一直在关注维基示例 我觉得我已经非常精确地遵循了他们的指导 但仍然没有运气 谁能看到这里缺少的链接是什么 jQuery docume
  • 在 IOS 中自定义 AirDrop 警报描述

    我有以下代码可以发送URL通过AirDrop NSString selfUrlScheme NSBundle mainBundle infoDictionary valueForKey CFBundleURLTypes objectAtIn
  • 使用 scapy 作为 MITM 即时更改数据包

    假设我设法处于客户端和服务器之间的通信中间 假设我打开一个热点并导致客户端仅通过我的机器连接到服务器 如何更改客户端发送和接收的数据包而不中断我自己与其他服务的通信 必须有一种方法可以通过我的脚本路由客户端发送和即将接收 在将它们转发给他之