/java-socks-proxy-server

Java SOCKS 4/5 server implementation for Java

Primary LanguageJava

APACHE v2 License Latest Release Javadocs Codacy

java-socks-proxy-server

java-socks-proxy-server is a SOCKS 4/5 server for Java. Includes a JUnit Rule for easy testing with a SOCKS server.

It is a continuation of https://github.com/damico/java-socks-proxy-server.

<dependency>
  <groupId>com.github.bbottema</groupId>
  <artifactId>java-socks-proxy-server</artifactId>
  <version>3.0.1</version>
</dependency>

Usage:

// start serving clients on port 1234
SocksServer server = new SocksServer(1234).start();
...
server.stop(); // stop serving any new proxy requests

Or you can supply your own ServerSocketFactory:

// e.g. SSL on port 7132
SocksServer server = new SocksServer(1234, myCustomServerFactory).start();

By default, library uses NO_AUTH authentication mode

Username and Password Authentication

If you want to authenticate the clients, before proxying, you can set a UsernamePasswordAuthenticator, library supports standard Username/Password protocol.

    new SocksServer(1234)
        .setAuthenticator(new UsernamePasswordAuthenticator(false) {
          @Override
          public boolean validate(String username, String password) {
            // validate credentials here, e.g. check your local database
            return username.equals("mysecureusername") && password.equals("mysecurepassword");
          }
        }).start();

Supply a true value to constructor UsernamePasswordAuthenticator(), if you also want to prefer NO_AUTH mode over Username and password.

For use in junit 5 tests (for Junit 4 use a version < 3.0.0):

@RegisterExtension
static SockServerExtension sockServerRule = new SockServerExtension(PROXY_SERVER_PORT);

// or

@RegisterExtension
static SockServerExtension sockServerRule = new SockServerExtension(PROXY_SERVER_PORT, myServerSocketFactory);

And that's it!

Change history

v4.1.0 (15-May-2024)

  • #14: Enhanced dynamic username/password authentication support for custom validation strategies.
  • Minor performance improvements based on SpotBugs recommendations.

NOTE: the start methods have been marked deprecated. For serving clienst on multiple ports, create a new instance of the server for each port.

v4.0.0 (21-April-2024)

  • Maintenance release: upgraded parent POM version, switched to Junit5, updated dependencies, added SpotBugs checks.

v3.0.0 (22-Januray-2024)

  • #12: Added a more robust server adaptation with synchronous startup (including retries), shutdown closes all connections. With thanks to @kllbzz

v2.0.0 (26-December-2021)

  • Switched to Java 8 and included fix for recent log4j security issue

v1.1.0 (15-April-2021)

  • #4 added support for custom server socket factory (so you are free to configure SSL)

v1.0.2 (5-July-2020)

  • Bumped log4j-core from 2.6.1 to 2.13.2

v1.0.1 (6-December-2019)

  • Removed Jacoco instrumentation from production code

v1.0.0 (6-December-2019)

Initial release

4-December-2019

Initial upload