From 6c12af2b941f7d66deb0c2879f5c932ca6b29cf0 Mon Sep 17 00:00:00 2001 From: Alexey <247128645+axkurcom@users.noreply.github.com> Date: Sat, 28 Feb 2026 13:38:30 +0300 Subject: [PATCH] ME Connectivity: socks-url Co-Authored-By: brekotis <93345790+brekotis@users.noreply.github.com> --- src/transport/middle_proxy/ping.rs | 30 ++++++++++++++++++++---------- src/transport/upstream.rs | 6 ++++++ 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/src/transport/middle_proxy/ping.rs b/src/transport/middle_proxy/ping.rs index a05e44d..b9f0836 100644 --- a/src/transport/middle_proxy/ping.rs +++ b/src/transport/middle_proxy/ping.rs @@ -101,16 +101,26 @@ fn route_from_egress(egress: Option) -> Option { parts.push(format!("src={ip}")); Some(format!("direct {}", parts.join(" "))) } - UpstreamRouteKind::Socks4 => Some( - info.socks_bound_addr - .map(|addr| format!("socks4 bnd={addr}")) - .unwrap_or_else(|| "socks4".to_string()), - ), - UpstreamRouteKind::Socks5 => Some( - info.socks_bound_addr - .map(|addr| format!("socks5 bnd={addr}")) - .unwrap_or_else(|| "socks5".to_string()), - ), + UpstreamRouteKind::Socks4 => { + let route = info + .socks_proxy_addr + .map(|addr| format!("socks4://{addr}")) + .unwrap_or_else(|| "socks4://unknown".to_string()); + Some(match info.socks_bound_addr { + Some(bound) => format!("{route} bnd={bound}"), + None => route, + }) + } + UpstreamRouteKind::Socks5 => { + let route = info + .socks_proxy_addr + .map(|addr| format!("socks5://{addr}")) + .unwrap_or_else(|| "socks5://unknown".to_string()); + Some(match info.socks_bound_addr { + Some(bound) => format!("{route} bnd={bound}"), + None => route, + }) + } } } diff --git a/src/transport/upstream.rs b/src/transport/upstream.rs index 5ab198c..1918fdc 100644 --- a/src/transport/upstream.rs +++ b/src/transport/upstream.rs @@ -164,6 +164,7 @@ pub struct UpstreamEgressInfo { pub local_addr: Option, pub direct_bind_ip: Option, pub socks_bound_addr: Option, + pub socks_proxy_addr: Option, } // ============= Upstream Manager ============= @@ -523,6 +524,7 @@ impl UpstreamManager { local_addr, direct_bind_ip: bind_ip, socks_bound_addr: None, + socks_proxy_addr: None, }, )) }, @@ -593,6 +595,7 @@ impl UpstreamManager { } }; let local_addr = stream.local_addr().ok(); + let socks_proxy_addr = stream.peer_addr().ok(); Ok(( stream, UpstreamEgressInfo { @@ -600,6 +603,7 @@ impl UpstreamManager { local_addr, direct_bind_ip: None, socks_bound_addr: Some(bound.addr), + socks_proxy_addr, }, )) }, @@ -672,6 +676,7 @@ impl UpstreamManager { } }; let local_addr = stream.local_addr().ok(); + let socks_proxy_addr = stream.peer_addr().ok(); Ok(( stream, UpstreamEgressInfo { @@ -679,6 +684,7 @@ impl UpstreamManager { local_addr, direct_bind_ip: None, socks_bound_addr: Some(bound.addr), + socks_proxy_addr, }, )) },