add websocket.timestamp_end

This commit is contained in:
Maximilian Hils 2021-03-16 14:52:01 +01:00
parent f236ee42ed
commit ac9852122f
4 changed files with 8 additions and 1 deletions

View file

@ -21,7 +21,7 @@ def websocket_message(flow):
async def inject_async(flow: http.HTTPFlow):
msg = "hello from mitmproxy! "
while flow.server_conn.connected:
while flow.websocket.timestamp_end is None:
ctx.master.commands.call("inject", [flow], False, msg)
await asyncio.sleep(1)
msg = msg[1:] + msg[:1]

View file

@ -291,6 +291,7 @@ def convert_11_12(data):
"closed_by_client": ws_flow["close_sender"] == "client",
"close_code": ws_flow["close_code"],
"close_reason": ws_flow["close_reason"],
"timestamp_end": data.get("server_conn", {}).get("timestamp_end", None),
}
else:

View file

@ -1,3 +1,4 @@
import time
from dataclasses import dataclass
from typing import Iterator, List
@ -189,6 +190,7 @@ class WebsocketLayer(layer.Layer):
)
yield dst_ws.send2(ws_event)
elif isinstance(ws_event, wsproto.events.CloseConnection):
self.flow.websocket.timestamp_end = time.time()
self.flow.websocket.closed_by_client = from_client
self.flow.websocket.close_code = ws_event.code
self.flow.websocket.close_reason = ws_event.reason

View file

@ -106,11 +106,15 @@ class WebSocketData(stateobject.StateObject):
close_reason: Optional[str] = None
"""[Close Reason](https://tools.ietf.org/html/rfc6455#section-7.1.6)"""
timestamp_end: Optional[float] = None
"""*Timestamp:* WebSocket connection closed."""
_stateobject_attributes = dict(
messages=List[WebSocketMessage],
closed_by_client=bool,
close_code=int,
close_reason=str,
timestamp_end=float,
)
def __init__(self):