【问题标题】:How to take control of subprocess socket?如何控制子进程套接字?
【发布时间】:2022-01-15 06:45:24
【问题描述】:

所以基本上,我想用subprocess 模块创建进程,我也想控制数据包。

什么意思?


考虑一下这段代码。

import socket
client = socket.socket()
client.connect((..., ...))

client.send("e".encode())
client.close()

(假设文件名是client.py
我想在这里做的是,我想制作另一个python文件,使用subprocess模块运行client.py,我想在父进程中监听它正在发送的数据包,我想修改它们,基本上篡改子进程套接字的数据包,如果可能的话。

【问题讨论】:

    标签: python sockets


    【解决方案1】:

    是的,这是可能的。它本质上就是调试器所做的。

    在系统/二进制级别,有一个系统调用ptrace(2),它允许一个进程控制另一个进程。这包括在受控进程中设置断点、停止它、继续它、修改其中的数据等等。要从 python 程序中操作它,有这个模块:https://python-ptrace.readthedocs.io/en/latest/usage.html

    您还可以在 python 语句级别进行调试。这就是 python 调试器模块 (pdb) 所做的。我不知道以编程方式运行它的最佳方式来调用它,但我确信这是可能的。 (在最坏的情况下,您可以简单地运行交互式调试器并将命令输入其中。)

    不过,这两个选项都会有显着的学习曲线。在较高级别上,您将在子进程中设置断点,以便程序在执行send 系统调用之前的某个点停止。触发断点后,您可以检查缓冲区内容和/或将其替换为您自己的内容,然后让程序继续运行。

    【讨论】:

    • 我认为这是我需要的,但是 python-ptrace 不支持 Windows,是否有其他软件包可以做同样的事情但支持 Windows?
    • 哦,好吧,看来 PTRACE 是用于 Unix 的,在 Windows 中不是这样的,我打算只做我自己的等价物,而不是控制现有程序并包装它,然后在那里篡改,还是谢谢。
    猜你喜欢
    • 2013-05-09
    • 2013-01-03
    • 2011-05-08
    • 1970-01-01
    • 2017-03-18
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多