Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

bbottema/java-socks-proxy-server

Open more actions menu

Repository files navigation

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>4.1.2</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.2 (02-October-2024)

  • #15: [bug+maintenance] Current version doesn't assign default authentication handler properly, address nullability and superfluous method chaining.

v4.1.0 (15-May-2024) v4.1.1 (duplicate release)

  • #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

About

Java SOCKS 4/5 server implementation for Java

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.