mitmproxy的中间拦截事件(七)

mitmproxy的基本原理

1.客户端发起一个到mitmproxy的连接,并且提交了HTTP CONNECT请求。
2.mitmproxy以200连接已经建立响应,好像已经建立了CONNECT通信管道。
3.客户端确信它正在和远端服务器会话,然后启动SSL连接。SSL连接使用服务器名字指示(SNI)指明它正在连接的主机名。
4.mitmproxy连接服务器,然后使用客户端指明的服务器名字指示的主机名建立SSL连接。
5.服务器以匹配的SSL证书响应,这个SSL证书里包含生成的拦截证书所必须的通用名(CN)和服务器备用名(SAN)。
6.mitmproxy生成拦截证书,然后继续进行在第3步暂停的客户端SSL握手。
7.客户端通过已经建立的SSL连接发送请求。
8.mitmproxy通过第4步建立的SSL连接传递这个请求给服务器。


mitmproxy开放了以下event供我们拦截使用

def clientconnect(self, root_layer):
    pass

def clientdisconnect(self, root_layer):
    pass

def serverconnect(self, server_conn):
    pass

def serverdisconnect(self, server_conn):
    pass

def next_layer(self, top_layer):
    pass

def http_connect(self, f):
    pass

def error(self, f):
    pass

def requestheaders(self, f):
    pass

def request(self, f):
    pass

def responseheaders(self, f):
    pass

def response(self, f):
    pass

def websocket_handshake(self, f):
    pass

def websocket_start(self, flow):
    pass

def websocket_message(self, flow):
    pass

def websocket_error(self, flow):
    pass

def websocket_end(self, flow):
    pass

def tcp_start(self, flow):
    pass

def tcp_message(self, flow):
    pass

def tcp_error(self, flow):
    pass

def tcp_end(self, flow):
    pass


比较常用的是response,通过inline script方式重写这些方法,添加需要拦截的功能等,然后mitmproxy启动时候通过-s添加进去。


你可能感兴趣的:(Mitmproxy)