ME Connectivity: socks-url

Co-Authored-By: brekotis <93345790+brekotis@users.noreply.github.com>
This commit is contained in:
Alexey 2026-02-28 13:38:30 +03:00
parent 8b39a4ef6d
commit 6c12af2b94
No known key found for this signature in database
2 changed files with 26 additions and 10 deletions

View File

@ -101,16 +101,26 @@ fn route_from_egress(egress: Option<UpstreamEgressInfo>) -> Option<String> {
parts.push(format!("src={ip}")); parts.push(format!("src={ip}"));
Some(format!("direct {}", parts.join(" "))) Some(format!("direct {}", parts.join(" ")))
} }
UpstreamRouteKind::Socks4 => Some( UpstreamRouteKind::Socks4 => {
info.socks_bound_addr let route = info
.map(|addr| format!("socks4 bnd={addr}")) .socks_proxy_addr
.unwrap_or_else(|| "socks4".to_string()), .map(|addr| format!("socks4://{addr}"))
), .unwrap_or_else(|| "socks4://unknown".to_string());
UpstreamRouteKind::Socks5 => Some( Some(match info.socks_bound_addr {
info.socks_bound_addr Some(bound) => format!("{route} bnd={bound}"),
.map(|addr| format!("socks5 bnd={addr}")) None => route,
.unwrap_or_else(|| "socks5".to_string()), })
), }
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,
})
}
} }
} }

View File

@ -164,6 +164,7 @@ pub struct UpstreamEgressInfo {
pub local_addr: Option<SocketAddr>, pub local_addr: Option<SocketAddr>,
pub direct_bind_ip: Option<IpAddr>, pub direct_bind_ip: Option<IpAddr>,
pub socks_bound_addr: Option<SocketAddr>, pub socks_bound_addr: Option<SocketAddr>,
pub socks_proxy_addr: Option<SocketAddr>,
} }
// ============= Upstream Manager ============= // ============= Upstream Manager =============
@ -523,6 +524,7 @@ impl UpstreamManager {
local_addr, local_addr,
direct_bind_ip: bind_ip, direct_bind_ip: bind_ip,
socks_bound_addr: None, socks_bound_addr: None,
socks_proxy_addr: None,
}, },
)) ))
}, },
@ -593,6 +595,7 @@ impl UpstreamManager {
} }
}; };
let local_addr = stream.local_addr().ok(); let local_addr = stream.local_addr().ok();
let socks_proxy_addr = stream.peer_addr().ok();
Ok(( Ok((
stream, stream,
UpstreamEgressInfo { UpstreamEgressInfo {
@ -600,6 +603,7 @@ impl UpstreamManager {
local_addr, local_addr,
direct_bind_ip: None, direct_bind_ip: None,
socks_bound_addr: Some(bound.addr), socks_bound_addr: Some(bound.addr),
socks_proxy_addr,
}, },
)) ))
}, },
@ -672,6 +676,7 @@ impl UpstreamManager {
} }
}; };
let local_addr = stream.local_addr().ok(); let local_addr = stream.local_addr().ok();
let socks_proxy_addr = stream.peer_addr().ok();
Ok(( Ok((
stream, stream,
UpstreamEgressInfo { UpstreamEgressInfo {
@ -679,6 +684,7 @@ impl UpstreamManager {
local_addr, local_addr,
direct_bind_ip: None, direct_bind_ip: None,
socks_bound_addr: Some(bound.addr), socks_bound_addr: Some(bound.addr),
socks_proxy_addr,
}, },
)) ))
}, },