mitmproxy icon indicating copy to clipboard operation
mitmproxy copied to clipboard

UDP Proxy fails on WSL1

Open mhils opened this issue 1 year ago • 0 comments

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.

mhils avatar Sep 09 '22 19:09 mhils