From dbe0ff0c2fef387ae5d60f52efd51b586309ef9b Mon Sep 17 00:00:00 2001 From: sbromt <145109056+sbromt@users.noreply.github.com> Date: Mon, 9 Dec 2024 19:41:55 +0900 Subject: [PATCH 1/4] Update main2.rs --- mitmproxy-windows/redirector/src/main2.rs | 68 +++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/mitmproxy-windows/redirector/src/main2.rs b/mitmproxy-windows/redirector/src/main2.rs index 632fa46b..7c56c4f0 100644 --- a/mitmproxy-windows/redirector/src/main2.rs +++ b/mitmproxy-windows/redirector/src/main2.rs @@ -232,11 +232,29 @@ async fn main() -> Result<()> { if address.process_id() == 4 { // We get some weird operating system events here, which are not useful. debug!("Skipping PID 4"); + + clear_connections( + connection_id, + &mut connections, + &inject_handle, + &mut ipc_tx, + address, + ).await; + continue; } let Ok(proto) = TransportProtocol::try_from(address.protocol()) else { warn!("Unknown transport protocol: {}", address.protocol()); + + clear_connections( + connection_id, + &mut connections, + &inject_handle, + &mut ipc_tx, + address, + ).await; + continue; }; let connection_id = ConnectionId { @@ -246,6 +264,15 @@ async fn main() -> Result<()> { }; if connection_id.src.ip().is_multicast() || connection_id.dst.ip().is_multicast() { + + clear_connections( + connection_id, + &mut connections, + &inject_handle, + &mut ipc_tx, + address, + ).await; + continue; } @@ -396,6 +423,47 @@ async fn main() -> Result<()> { } } +async fn clear_connections( + connection_id: ConnectionId, + connections: &mut LruCache, + inject_handle: &WinDivert, + ipc_tx: &mut UnboundedSender, + address: WinDivertAddress, +) { + match address.event() { + WinDivertEvent::SocketConnect | WinDivertEvent::SocketAccept => { + let make_entry = match connections.get(&connection_id) { + None => true, + Some(e) => matches!(e, ConnectionState::Unknown(_)), + }; + + debug!( + "{:<15?} make_entry={} pid={} {}", + address.event(), + make_entry, + address.process_id(), + connection_id + ); + + if !make_entry { + return; + } + + let action = ConnectionAction::None; + let _ = insert_into_connections( + connection_id, + &action, + &address.event(), + connections, + inject_handle, + ipc_tx, + ) + .await; + } + _ => {} + } +} + async fn handle_ipc( mut ipc: NamedPipeClient, mut ipc_rx: UnboundedReceiver, From 5a16df55be0620968c2c8bba6ae3f2824250ad27 Mon Sep 17 00:00:00 2001 From: sbromt <145109056+sbromt@users.noreply.github.com> Date: Thu, 19 Dec 2024 08:59:15 +0900 Subject: [PATCH 2/4] Update main2.rs --- mitmproxy-windows/redirector/src/main2.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mitmproxy-windows/redirector/src/main2.rs b/mitmproxy-windows/redirector/src/main2.rs index 7c56c4f0..62bddcca 100644 --- a/mitmproxy-windows/redirector/src/main2.rs +++ b/mitmproxy-windows/redirector/src/main2.rs @@ -234,7 +234,7 @@ async fn main() -> Result<()> { debug!("Skipping PID 4"); clear_connections( - connection_id, + packet.connection_id(), &mut connections, &inject_handle, &mut ipc_tx, @@ -248,7 +248,7 @@ async fn main() -> Result<()> { warn!("Unknown transport protocol: {}", address.protocol()); clear_connections( - connection_id, + packet.connection_id(), &mut connections, &inject_handle, &mut ipc_tx, @@ -266,7 +266,7 @@ async fn main() -> Result<()> { if connection_id.src.ip().is_multicast() || connection_id.dst.ip().is_multicast() { clear_connections( - connection_id, + packet.connection_id(), &mut connections, &inject_handle, &mut ipc_tx, From 5505bf546e4cd7a190b147c695f875dcbea7d16d Mon Sep 17 00:00:00 2001 From: sbromt <145109056+sbromt@users.noreply.github.com> Date: Thu, 19 Dec 2024 09:05:36 +0900 Subject: [PATCH 3/4] Update main2.rs --- mitmproxy-windows/redirector/src/main2.rs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/mitmproxy-windows/redirector/src/main2.rs b/mitmproxy-windows/redirector/src/main2.rs index 62bddcca..de0bc171 100644 --- a/mitmproxy-windows/redirector/src/main2.rs +++ b/mitmproxy-windows/redirector/src/main2.rs @@ -229,12 +229,19 @@ async fn main() -> Result<()> { } } Event::SocketInfo(address) => { + let proto = TransportProtocol::try_from(address.protocol())?; + let connection_id = ConnectionId { + proto, + src: SocketAddr::from((address.local_address(), address.local_port())), + dst: SocketAddr::from((address.remote_address(), address.remote_port())), + }; + if address.process_id() == 4 { // We get some weird operating system events here, which are not useful. debug!("Skipping PID 4"); clear_connections( - packet.connection_id(), + connection_id, &mut connections, &inject_handle, &mut ipc_tx, @@ -248,7 +255,7 @@ async fn main() -> Result<()> { warn!("Unknown transport protocol: {}", address.protocol()); clear_connections( - packet.connection_id(), + connection_id, &mut connections, &inject_handle, &mut ipc_tx, @@ -266,7 +273,7 @@ async fn main() -> Result<()> { if connection_id.src.ip().is_multicast() || connection_id.dst.ip().is_multicast() { clear_connections( - packet.connection_id(), + connection_id, &mut connections, &inject_handle, &mut ipc_tx, From 1d7c2518b8c4cfb8928ca209daad8097d9bda527 Mon Sep 17 00:00:00 2001 From: sbromt <145109056+sbromt@users.noreply.github.com> Date: Thu, 19 Dec 2024 09:06:40 +0900 Subject: [PATCH 4/4] Update main2.rs --- mitmproxy-windows/redirector/src/main2.rs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/mitmproxy-windows/redirector/src/main2.rs b/mitmproxy-windows/redirector/src/main2.rs index de0bc171..fe96b352 100644 --- a/mitmproxy-windows/redirector/src/main2.rs +++ b/mitmproxy-windows/redirector/src/main2.rs @@ -264,11 +264,6 @@ async fn main() -> Result<()> { continue; }; - let connection_id = ConnectionId { - proto, - src: SocketAddr::from((address.local_address(), address.local_port())), - dst: SocketAddr::from((address.remote_address(), address.remote_port())), - }; if connection_id.src.ip().is_multicast() || connection_id.dst.ip().is_multicast() {