mitmproxy
mitmproxy copied to clipboard
UDP Proxy fails on WSL1
mitmdump --mode reverse:udp://quic.westus.cloudapp.azure.com:[email protected]:8080 -vvv --set proxy_debug
curl.exe --http3 https://localhost:8080 -k
runs into a weird inifinite loop:
127.0.0.1:61031: client connect
127.0.0.1:61031: >> Start({})
127.0.0.1:61031: << OpenConnection({'connection': Server({'id': '…1a3725', 'address': ('quic.westus.cloudapp.azure.com', 443), 'state': <ConnectionState.CLOSED: 0>, 'transport_protocol': 'udp'})})
127.0.0.1:61031: >! ConnectionClosed(connection=Client({'id': '…90d580', 'peername': ('127.0.0.1', 61031), 'sockname': ('127.0.0.1', 8080), 'timestamp_start': 1662751160.5993326, 'state': <ConnectionState.CAN_WRITE: 2>, 'transport_protocol': 'udp', 'proxy_mode': ProxyMode.parse('reverse:udp://quic.westus.cloudapp.azure.com:[email protected]:8080')}))
Dropped UDP packet from 127.0.0.1:61031.
Dropped UDP packet from 127.0.0.1:61031.
Dropped UDP packet from 127.0.0.1:61031.
Dropped UDP packet from 127.0.0.1:61031.
Dropped UDP packet from 127.0.0.1:61031.
Dropped UDP packet from 127.0.0.1:61031.
Dropped UDP packet from 127.0.0.1:61031.
Dropped UDP packet from 127.0.0.1:61031.
Dropped UDP packet from 127.0.0.1:61031.
Dropped UDP packet from 127.0.0.1:61031.
Dropped UDP packet from 127.0.0.1:61031.
Dropped UDP packet from 127.0.0.1:61031.
Dropped UDP packet from 127.0.0.1:61031.
Dropped UDP packet from 127.0.0.1:61031.
Dropped UDP packet from 127.0.0.1:61031.
Dropped UDP packet from 127.0.0.1:61031.
Dropped UDP packet from 127.0.0.1:61031.
Dropped UDP packet from 127.0.0.1:61031.
Dropped UDP packet from 127.0.0.1:61031.
127.0.0.1:61031: server connect quic.westus.cloudapp.azure.com:443 (23.99.8.214:443)
127.0.0.1:61031: >> Reply(OpenConnection({'connection': Server({'id': '…1a3725', 'address': ('quic.westus.cloudapp.azure.com', 443), 'state': <ConnectionState.OPEN: 3>, 'transport_protocol': 'udp', 'sockname': ('192.168.178.20', 54287), 'timestamp_start': 1662751160.6020422, 'peername': ('23.99.8.214', 443)})}), None)
127.0.0.1:61031: >> Start({})
127.0.0.1:61031: !> ConnectionClosed(connection=Client({'id': '…90d580', 'peername': ('127.0.0.1', 61031), 'sockname': ('127.0.0.1', 8080), 'timestamp_start': 1662751160.5993326, 'state': <ConnectionState.CAN_WRITE: 2>, 'transport_protocol': 'udp', 'proxy_mode': ProxyMode.parse('reverse:udp://quic.westus.cloudapp.azure.com:[email protected]:8080')}))
127.0.0.1:61031: >> ConnectionClosed(connection=Client({'id': '…90d580', 'peername': ('127.0.0.1', 61031), 'sockname': ('127.0.0.1', 8080), 'timestamp_start': 1662751160.5993326, 'state': <ConnectionState.CAN_WRITE: 2>, 'transport_protocol': 'udp', 'proxy_mode': ProxyMode.parse('reverse:udp://quic.westus.cloudapp.azure.com:[email protected]:8080')}))
127.0.0.1:61031: << CloseConnection({'connection': Client({'id': '…90d580', 'peername': ('127.0.0.1', 61031), 'sockname': ('127.0.0.1', 8080), 'timestamp_start': 1662751160.5993326, 'state': <ConnectionState.CAN_WRITE: 2>, 'transport_protocol': 'udp', 'proxy_mode': ProxyMode.parse('reverse:udp://quic.westus.cloudapp.azure.com:[email protected]:8080')}), 'half_close': False})
127.0.0.1:61031: << CloseConnection({'connection': Client({'id': '…90d580', 'peername': ('127.0.0.1', 61031), 'sockname': ('127.0.0.1', 8080), 'timestamp_start': 1662751160.5993326, 'state': <ConnectionState.CAN_WRITE: 2>, 'transport_protocol': 'udp', 'proxy_mode': ProxyMo…
Dropped UDP packet from 127.0.0.1:61031.
Dropped UDP packet from 127.0.0.1:61031.
Dropped UDP packet from 127.0.0.1:61031.
127.0.0.1:61031: client disconnect
The problem seems to be that we get tons of empty b""
datagrams in handle_udp_datagram
after the initial data.
λ mitmdump --version
Mitmproxy: 9.0.0.dev (+144, commit cf237d6)
Python: 3.10.5
OpenSSL: OpenSSL 3.0.5 5 Jul 2022
Platform: Linux-4.4.0-22621-Microsoft-x86_64-with-glibc2.31
This does not happen on plain Windows 11.