使用 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 即时更改数据包 的相关文章

  • Python 3 __getattribute__ 与点访问行为

    我读了一些关于 python 的对象属性查找的内容 这里 https blog ionelmc ro 2015 02 09 understanding python metaclasses object attribute lookup h
  • python 中分割字符串以获得一个值?

    需要帮助 假设我在名为 input 的变量中有一个字符串 Sam Person name kind input split 通过执行上述操作 我得到两个具有不同字符串 Sam 和 Person 的变量 有没有办法只获取第一个值 name S
  • 可以在 TensorFlow 中使用排名相关作为成本函数吗?

    我正在处理偶尔充满异常值的极其嘈杂的数据 因此我主要依靠相关性来衡量我的神经网络的准确性 是否可以明确使用诸如等级相关性 斯皮尔曼相关系数 之类的东西作为我的成本函数 到目前为止 我主要依赖 MSE 作为相关性的代理 我现在面临三个主要障碍
  • 带图像的简单 GUI [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我试图在简单的 GUI 上显示一些卡
  • 如何限制Django CreateView中ForeignKey字段的选择?

    我有一个沿着这些思路的模型结构 models py class Foo models Model class Bar models Model foo models ForeignKey Foo class Baz models Model
  • 如果字段值在外部列表中,Django 会注释布尔值

    想象一下我有这个 Django 模型 class Letter models Model name models CharField max length 1 unique True 还有这个列表 vowels a e i o u 我想查询
  • Python igraph:从图中删除顶点

    我正在使用安然电子邮件数据集 并尝试删除没有 enron com 的电子邮件地址 即我只想拥有安然电子邮件 当我尝试删除那些没有 enron com 的地址时 一些电子邮件由于某些原因被跳过 下面显示了一个小图 其中顶点是电子邮件地址 这是
  • sudo pip install python-Levenshtein 失败,错误代码 1

    我正在尝试在 Linux 上安装 python Levenshtein 库 但每当我尝试通过以下方式安装它时 sudo pip install python Levenshtein 我收到此错误 命令 usr bin python c 导入
  • 如何使用 python urllib 在 HTTP/1.1 中保持活力

    现在我正在这样做 Python3 urllib url someurl headers HOST somehost Connection keep alive Accept Encoding gzip deflate opener urll
  • Python Kivy - 在本机网络浏览器中打开 url 的应用程序

    我尝试制作一个简单的应用程序 在单击 Screen One 上的按钮后 在 Kivy 中打开一个网页 我使用了这个主题 Python 在应用程序中直接显示网络浏览器 iframe https stackoverflow com questi
  • 获取列表中倒数第二个元素[重复]

    这个问题在这里已经有答案了 我可以通过以下方式获取列表的倒数第二个元素 gt gt gt lst a b c d e f gt gt gt print lst len lst 2 e 有没有比使用更好的方法print lst len lst
  • 在可编辑的QSqlQueryModel中实现setEditStrategy

    这是后续这个问题 https stackoverflow com questions 49752388 editable qtableview of complex sql query 在那里 我们创建了 QSqlQueryModel 的可
  • 将 Pandas 列中的列表拆分为单独的列

    这是我在 pandas 数据框中的 特征 列 Feature Cricket 82379 Kabaddi 255 Reality 4751 Cricket 15640 Wildlife 730 LiveTV 13 Football 4129
  • 如何列出 python PDB 中的当前行?

    在 perl 调试器中 如果重复列出离开当前行的代码段 可以通过输入命令返回到当前行 点 我无法使用 python PDB 模块找到任何类似的东西 如果我list如果我自己离开当前行并想再次查看它 似乎我必须记住当前正在执行的行号 对我来说
  • 在 MacO 和 Linux 上安装 win32com [重复]

    这个问题在这里已经有答案了 我的问题很简单 我可以安装吗win32com蟒蛇API pywin32特别是 在非 Windows 操作系统上 我一直在Mac上尝试多个版本pip install pywin32 都失败了 下面是一个例子 如果你
  • 如何通过字符串匹配加速 pandas 行过滤?

    我经常需要过滤 pandas 数据框df by df df col name string value 并且我想加快行选择操作 有没有快速的方法可以做到这一点 例如 In 1 df mul df 3000 2000 3 reset inde
  • Flask WTForms 使用变量自动填充 StringField

    我有一个表格 我想用上一页收到的信息自动填充一些字段 但如果他们想调整它 它需要是可更改的 我正在为我的 SelectField 使用动态创建的列表 但添加 StringField 并不成功 请参阅下面的我的代码 forms py clas
  • 张量流:注册 numpy bfloat16 扩展

    正如我所见 tensorflow 中有 bfloat16 的 numpy 扩展 https github com tensorflow tensorflow blob 24ffe9f729160a095a5cab8f592392018280
  • 全局变量是 None 而不是实例 - Python

    我正在处理Python 中的全局变量 代码应该可以正常工作 但是有一个问题 我必须使用全局变量作为类的实例Back 当我运行应用程序时 它说 back is None 这应该不是真的 因为第二行setup 功能 back Back Back
  • TypeError:无法使用抽象方法实例化抽象类 <...>

    这是我的代码 from abc import ABC from abc import abstractmethod class Mamifiero ABC docstring for Mamifiero def init self self

随机推荐

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

    我已经实现了工厂方法模式来参数化产品类的基类 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 即时更改数据包

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