From fc42f6314eb593b129ff0bb028c585ce677e0e6d Mon Sep 17 00:00:00 2001 From: woodser Date: Wed, 26 Feb 2025 15:22:23 -0500 Subject: [PATCH] direct bind tor node uses configured socks5 proxy --- .../java/haveno/network/p2p/NetworkNodeProvider.java | 6 ++++-- .../p2p/network/TorNetworkNodeDirectBind.java | 12 +++++++----- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/p2p/src/main/java/haveno/network/p2p/NetworkNodeProvider.java b/p2p/src/main/java/haveno/network/p2p/NetworkNodeProvider.java index 798d162357..fa1aa61470 100644 --- a/p2p/src/main/java/haveno/network/p2p/NetworkNodeProvider.java +++ b/p2p/src/main/java/haveno/network/p2p/NetworkNodeProvider.java @@ -22,6 +22,7 @@ import com.google.inject.Provider; import com.google.inject.name.Named; import haveno.common.config.Config; import haveno.common.proto.network.NetworkProtoResolver; +import haveno.network.Socks5ProxyProvider; import haveno.network.p2p.network.BanFilter; import haveno.network.p2p.network.BridgeAddressProvider; import haveno.network.p2p.network.LocalhostNetworkNode; @@ -55,7 +56,8 @@ public class NetworkNodeProvider implements Provider { @Named(Config.TOR_CONTROL_PASSWORD) String password, @Nullable @Named(Config.TOR_CONTROL_COOKIE_FILE) File cookieFile, @Named(Config.TOR_STREAM_ISOLATION) boolean streamIsolation, - @Named(Config.TOR_CONTROL_USE_SAFE_COOKIE_AUTH) boolean useSafeCookieAuthentication) { + @Named(Config.TOR_CONTROL_USE_SAFE_COOKIE_AUTH) boolean useSafeCookieAuthentication, + Socks5ProxyProvider socks5ProxyProvider) { if (useLocalhostForP2P) { networkNode = new LocalhostNetworkNode(port, networkProtoResolver, banFilter, maxConnections); } else { @@ -72,7 +74,7 @@ public class NetworkNodeProvider implements Provider { if (torMode instanceof NewTor || torMode instanceof RunningTor) { networkNode = new TorNetworkNodeNetlayer(port, networkProtoResolver, torMode, banFilter, maxConnections, streamIsolation, controlHost); } else { - networkNode = new TorNetworkNodeDirectBind(port, networkProtoResolver, banFilter, maxConnections, hiddenServiceAddress); + networkNode = new TorNetworkNodeDirectBind(port, networkProtoResolver, banFilter, maxConnections, hiddenServiceAddress, socks5ProxyProvider); } } } diff --git a/p2p/src/main/java/haveno/network/p2p/network/TorNetworkNodeDirectBind.java b/p2p/src/main/java/haveno/network/p2p/network/TorNetworkNodeDirectBind.java index 8333af3f8b..6ccd5b1314 100644 --- a/p2p/src/main/java/haveno/network/p2p/network/TorNetworkNodeDirectBind.java +++ b/p2p/src/main/java/haveno/network/p2p/network/TorNetworkNodeDirectBind.java @@ -1,6 +1,7 @@ package haveno.network.p2p.network; import haveno.common.util.Hex; +import haveno.network.Socks5ProxyProvider; import haveno.network.p2p.NodeAddress; import haveno.common.UserThread; @@ -9,7 +10,6 @@ import haveno.common.proto.network.NetworkProtoResolver; import com.runjva.sourceforge.jsocks.protocol.Socks5Proxy; import java.net.Socket; -import java.net.InetAddress; import java.net.ServerSocket; import java.io.IOException; @@ -25,16 +25,18 @@ import static com.google.common.base.Preconditions.checkArgument; @Slf4j public class TorNetworkNodeDirectBind extends TorNetworkNode { - private static final int TOR_DATA_PORT = 9050; // TODO: config option? private final String serviceAddress; + private final Socks5ProxyProvider socks5ProxyProvider; public TorNetworkNodeDirectBind(int servicePort, NetworkProtoResolver networkProtoResolver, @Nullable BanFilter banFilter, int maxConnections, - String hiddenServiceAddress) { + String hiddenServiceAddress, + Socks5ProxyProvider socks5ProxyProvider) { super(servicePort, networkProtoResolver, banFilter, maxConnections); this.serviceAddress = hiddenServiceAddress; + this.socks5ProxyProvider = socks5ProxyProvider; } @Override @@ -47,7 +49,7 @@ public class TorNetworkNodeDirectBind extends TorNetworkNode { @Override public Socks5Proxy getSocksProxy() { - Socks5Proxy proxy = new Socks5Proxy(InetAddress.getLoopbackAddress(), TOR_DATA_PORT); + Socks5Proxy proxy = new Socks5Proxy(socks5ProxyProvider.getSocks5Proxy().getInetAddress(), socks5ProxyProvider.getSocks5Proxy().getPort()); // TODO: can/should we return the same socks5 proxy directly? proxy.resolveAddrLocally(false); return proxy; } @@ -57,7 +59,7 @@ public class TorNetworkNodeDirectBind extends TorNetworkNode { // https://datatracker.ietf.org/doc/html/rfc1928 SOCKS5 Protocol try { checkArgument(peerNodeAddress.getHostName().endsWith(".onion"), "PeerAddress is not an onion address"); - Socket sock = new Socket(InetAddress.getLoopbackAddress(), TOR_DATA_PORT); + Socket sock = new Socket(getSocksProxy().getInetAddress(), getSocksProxy().getPort()); sock.getOutputStream().write(Hex.decode("050100")); String response = Hex.encode(sock.getInputStream().readNBytes(2)); if (!response.equalsIgnoreCase("0500")) {