如何使用猴子修补python';s套接字模块,使其转储流量

如何使用猴子修补python';s套接字模块,使其转储流量,python,python-2.7,sockets,monkeypatching,Python,Python 2.7,Sockets,Monkeypatching,我试图在Python2.7中创建一个socket.socket类的子类,使用重写的send()和read()方法,以便它们将通过套接字传输的数据转储到终端。代码如下所示: import socket class SocketMonkey(socket.socket): def send(self, buf): print('BUF: {}'.format(buf)) return super(SocketMonkey, self).send(buf)

我试图在Python2.7中创建一个
socket.socket
类的子类,使用重写的
send()
read()
方法,以便它们将通过套接字传输的数据转储到终端。代码如下所示:

import socket

class SocketMonkey(socket.socket):
    def send(self, buf):
        print('BUF: {}'.format(buf))
        return super(SocketMonkey, self).send(buf)

    def recv(self, size=-1):
        buf = super(SocketMonkey, self).recv(size)
        print('BUF: {}'.format(buf))
        return buf

socket.socket = SocketMonkey
这就是我如何实例化和使用这个类:

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('www.domain.com', 80))
sock.send('GET / HTTP/1.1\n\n')

我已经对socket模块进行了猴子补丁,但尽管socket功能和以前一样工作,但数据并没有被转储。你知道我哪里出了问题吗?

我也遇到了同样的问题,使用下面的代码解决了

导入套接字
导入日志记录
类TestSocket:
"""
定义将用于测试的自定义套接字类。
"""
定义初始化(自、自动对焦、袜子类型):
logging.log(logging.DEBUG,
f“假套接字构造[{af}][{sock_type}]”)
def发送到(自身、数据、地址):
logging.log(logging.DEBUG,
f“发送到[{data}][{address}]”)
def插座(af,插座类型):
返回TestSocket(af、sock_类型)
def测试下载文件(monkeypatch,提交):
使用monkeypatch.context()作为m:
#这将替换套接字构造函数。
m、 setattr(套接字,“套接字”,套接字获取)
#现在使用套接字。
# ...

我也遇到了同样的问题,使用以下代码解决了

导入套接字
导入日志记录
类TestSocket:
"""
定义将用于测试的自定义套接字类。
"""
定义初始化(自、自动对焦、袜子类型):
logging.log(logging.DEBUG,
f“假套接字构造[{af}][{sock_type}]”)
def发送到(自身、数据、地址):
logging.log(logging.DEBUG,
f“发送到[{data}][{address}]”)
def插座(af,插座类型):
返回TestSocket(af、sock_类型)
def测试下载文件(monkeypatch,提交):
使用monkeypatch.context()作为m:
#这将替换套接字构造函数。
m、 setattr(套接字,“套接字”,套接字获取)
#现在使用套接字。
# ...

你能显示你正在实例化和使用套接字实例的代码吗?@JaceBrowning我将用法添加到question.relevant:;概要:套接字不尊重子类化,而是使用委托。快速确认:
打印(sock.send)
。我认为这是socket作为C库的一个“特性”,而不是Python;我还有更多的探索要做。你能展示一下你在哪里实例化和使用套接字实例的代码吗?@JaceBrowning我把用法添加到question.relevant:;概要:套接字不尊重子类化,而是使用委托。快速确认:
打印(sock.send)
。我认为这是socket作为C库的一个“特性”,而不是Python;我还有更多的探索要做。