mitmproxy/examples/addons/websocket-inject-message.py

34 lines
1.0 KiB
Python
Raw Normal View History

2021-03-13 23:48:39 +00:00
"""
Inject a WebSocket message into a running connection.
This example shows how to inject a WebSocket message into a running connection.
"""
import asyncio
from mitmproxy import ctx, http
# Simple example: Inject a message as a response to an event
2021-07-15 12:46:45 +00:00
def websocket_message(flow: http.HTTPFlow):
assert flow.websocket is not None # make type checker happy
2021-03-13 23:48:39 +00:00
last_message = flow.websocket.messages[-1]
if b"secret" in last_message.content:
2021-07-15 12:46:45 +00:00
last_message.drop()
2021-03-16 14:01:33 +00:00
ctx.master.commands.call("inject.websocket", flow, last_message.from_client, "ssssssh")
2021-03-13 23:48:39 +00:00
# Complex example: Schedule a periodic timer
async def inject_async(flow: http.HTTPFlow):
msg = "hello from mitmproxy! "
2021-07-15 12:46:45 +00:00
assert flow.websocket is not None # make type checker happy
2021-03-16 13:52:01 +00:00
while flow.websocket.timestamp_end is None:
2021-03-16 14:01:33 +00:00
ctx.master.commands.call("inject.websocket", flow, True, msg)
2021-03-13 23:48:39 +00:00
await asyncio.sleep(1)
msg = msg[1:] + msg[:1]
def websocket_start(flow: http.HTTPFlow):
asyncio.create_task(inject_async(flow))