package aQute.bnd.comm.tests;
import java.io.IOException;
import org.littleshoot.proxy.HttpProxyServerBootstrap;
import org.littleshoot.proxy.ProxyAuthenticator;
import org.littleshoot.proxy.impl.DefaultHttpProxyServer;
import sockslib.common.AuthenticationException;
import sockslib.common.Credentials;
import sockslib.common.methods.UsernamePasswordMethod;
import sockslib.server.Session;
import sockslib.server.SocksProxyServer;
import sockslib.server.SocksServerBuilder;
import sockslib.server.UsernamePasswordAuthenticator;
import sockslib.server.listener.CloseSessionException;
import sockslib.server.listener.SessionListener;
import sockslib.server.manager.MemoryBasedUserManager;
import sockslib.server.manager.User;
import sockslib.server.manager.UserManager;
import sockslib.server.msg.CommandMessage;
public class Standalone {
private SocksProxyServer socks5Proxy;
void createSecureSocks5() throws IOException, InterruptedException {
UserManager userManager = new MemoryBasedUserManager();
userManager.create(new User("proxyuser", "good"));
SocksServerBuilder builder = SocksServerBuilder.newSocks5ServerBuilder();
builder.setBindPort(9090);
// builder.setUserManager(userManager);
UsernamePasswordMethod usernamePasswordMethod = new UsernamePasswordMethod();
usernamePasswordMethod.setAuthenticator(new UsernamePasswordAuthenticator() {
@Override
public void doAuthenticate(Credentials arg0, Session arg1) throws AuthenticationException {
super.doAuthenticate(arg0, arg1);
System.out.println("Auth " + arg0 + " " + arg1);
}
});
builder.setSocksMethods(usernamePasswordMethod).setUserManager(userManager);
socks5Proxy = builder.build();
socks5Proxy.getSessionManager().addSessionListener("abc", new SessionListener() {
@Override
public void onException(Session arg0, Exception arg1) {
System.err.println("Exception " + arg0 + " " + arg1);
arg1.printStackTrace();
}
@Override
public void onCommand(Session arg0, CommandMessage arg1) throws CloseSessionException {
System.err.println("Command " + arg0 + " " + arg1);
}
@Override
public void onClose(Session arg0) {
System.err.println("Close " + arg0);
}
@Override
public void onCreate(Session arg0) throws CloseSessionException {
System.err.println("Create " + arg0);
}
});
socks5Proxy.start();
}
void createHttpProxy() {
HttpProxyServerBootstrap bootstrap = DefaultHttpProxyServer.bootstrap().withPort(9091);
bootstrap.withProxyAuthenticator(new ProxyAuthenticator() {
@Override
public boolean authenticate(String user, String password) {
System.out.println("Authenticating " + user + " : " + password);
return "proxyuser".equals(user) && "good".equals(password);
}
});
bootstrap.start();
}
public static void main(String args[]) throws InterruptedException, IOException {
Standalone s = new Standalone();
s.createSecureSocks5();
s.createHttpProxy();
// Socks5Server socks5Server = new Socks5Server();
// socks5Server.start(new String[] {"--port", "9090", "--auth",
// "proxyuser:good"});
Thread.sleep(10000000);
}
}