Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes15kdownloads
eventsequence.py85 linesDownload Raw Back to mitmproxy
1from collections.abc import Callable2from collections.abc import Iterator3from typing import Any4 5from mitmproxy import dns6from mitmproxy import flow7from mitmproxy import hooks8from mitmproxy import http9from mitmproxy import tcp10from mitmproxy import udp11from mitmproxy.proxy import layers12 13TEventGenerator = Iterator[hooks.Hook]14 15 16def _iterate_http(f: http.HTTPFlow) -> TEventGenerator:17    if f.request:18        yield layers.http.HttpRequestHeadersHook(f)19        yield layers.http.HttpRequestHook(f)20    if f.response:21        yield layers.http.HttpResponseHeadersHook(f)22        yield layers.http.HttpResponseHook(f)23    if f.websocket:24        message_queue = f.websocket.messages25        f.websocket.messages = []26        yield layers.websocket.WebsocketStartHook(f)27        for m in message_queue:28            f.websocket.messages.append(m)29            yield layers.websocket.WebsocketMessageHook(f)30        yield layers.websocket.WebsocketEndHook(f)31    elif f.error:32        yield layers.http.HttpErrorHook(f)33 34 35def _iterate_tcp(f: tcp.TCPFlow) -> TEventGenerator:36    messages = f.messages37    f.messages = []38    yield layers.tcp.TcpStartHook(f)39    while messages:40        f.messages.append(messages.pop(0))41        yield layers.tcp.TcpMessageHook(f)42    if f.error:43        yield layers.tcp.TcpErrorHook(f)44    else:45        yield layers.tcp.TcpEndHook(f)46 47 48def _iterate_udp(f: udp.UDPFlow) -> TEventGenerator:49    messages = f.messages50    f.messages = []51    yield layers.udp.UdpStartHook(f)52    while messages:53        f.messages.append(messages.pop(0))54        yield layers.udp.UdpMessageHook(f)55    if f.error:56        yield layers.udp.UdpErrorHook(f)57    else:58        yield layers.udp.UdpEndHook(f)59 60 61def _iterate_dns(f: dns.DNSFlow) -> TEventGenerator:62    if f.request:63        yield layers.dns.DnsRequestHook(f)64    if f.response:65        yield layers.dns.DnsResponseHook(f)66    if f.error:67        yield layers.dns.DnsErrorHook(f)68 69 70_iterate_map: dict[type[flow.Flow], Callable[[Any], TEventGenerator]] = {71    http.HTTPFlow: _iterate_http,72    tcp.TCPFlow: _iterate_tcp,73    udp.UDPFlow: _iterate_udp,74    dns.DNSFlow: _iterate_dns,75}76 77 78def iterate(f: flow.Flow) -> TEventGenerator:79    try:80        e = _iterate_map[type(f)]81    except KeyError as err:82        raise TypeError(f"Unknown flow type: {f.__class__.__name__}") from err83    else:84        yield from e(f)85 
codekingpro/portable-devtools · Team Ai