add websockets support to mitmproxy

This commit is contained in:
Thomas Kriechbaumer
2016-08-16 18:31:50 +02:00
parent d12515f84b
commit e5b0dae7e9
7 changed files with 465 additions and 9 deletions

View File

@@ -198,7 +198,7 @@ class Response(_HTTPMessage):
1,
StatusCode(101)
)
headers = netlib.websockets.WebsocketsProtocol.server_handshake_headers(
headers = netlib.websockets.server_handshake_headers(
settings.websocket_key
)
for i in headers.fields:
@@ -310,7 +310,7 @@ class Request(_HTTPMessage):
1,
Method("get")
)
for i in netlib.websockets.WebsocketsProtocol.client_handshake_headers().fields:
for i in netlib.websockets.client_handshake_headers().fields:
if not get_header(i[0], self.headers):
tokens.append(
Header(

View File

@@ -139,7 +139,7 @@ class WebsocketFrameReader(basethread.BaseThread):
except exceptions.TcpDisconnect:
return
self.frames_queue.put(frm)
log("<< %s" % frm.header.human_readable())
log("<< %s" % repr(frm.header))
if self.ws_read_limit is not None:
self.ws_read_limit -= 1
starttime = time.time()

View File

@@ -173,12 +173,13 @@ class PathodHandler(tcp.BaseHandler):
retlog["cipher"] = self.get_current_cipher()
m = utils.MemBool()
websocket_key = websockets.WebsocketsProtocol.check_client_handshake(headers)
self.settings.websocket_key = websocket_key
valid_websockets_handshake = websockets.check_handshake(headers)
self.settings.websocket_key = websockets.get_client_key(headers)
# If this is a websocket initiation, we respond with a proper
# server response, unless over-ridden.
if websocket_key:
if valid_websockets_handshake:
anchor_gen = language.parse_pathod("ws")
else:
anchor_gen = None
@@ -225,7 +226,7 @@ class PathodHandler(tcp.BaseHandler):
spec,
lg
)
if nexthandler and websocket_key:
if nexthandler and valid_websockets_handshake:
self.protocol = protocols.websockets.WebsocketsProtocol(self)
return self.protocol.handle_websocket, retlog
else:

View File

@@ -20,7 +20,7 @@ class WebsocketsProtocol:
lg("Error reading websocket frame: %s" % e)
return None, None
ended = time.time()
lg(frm.human_readable())
lg(repr(frm))
retlog = dict(
type="inbound",
protocol="websockets",