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>
// 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
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 constructorUsernamePasswordAuthenticator()
, if you also want to preferNO_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!
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