public static SocksProxyServer newUsernamePasswordAuthenticationServer(int port, User... users) { SocksProxyServer proxyServer = new BasicSocksProxyServer(Socks5Handler.class, port); proxyServer.setBufferSize(BUFFER_SIZE); proxyServer.setTimeout(TIMEOUT); UsernamePasswordAuthenticator authenticator = new UsernamePasswordAuthenticator(); for (User user : users) { authenticator.addUser(user.getUsername(), user.getPassword()); } proxyServer.setSupportMethods(new UsernamePasswordMethod(authenticator)); return proxyServer; }
@Override public void doAuthenticate(Credentials credentials, Session session) throws AuthenticationException { if (credentials instanceof UsernamePasswordCredentials) { String username = credentials.getUserPrincipal().getName(); String password = credentials.getPassword(); User user = userManager.check(username, password); if (user == null) { authenticationFailed(session); } authenticationSuccess(session, user); } else { throw new AuthenticationException("Only support Username/Password Authentication"); } }
@Override public void doMethod(Session session) throws SocksException, IOException { checkNotNull(session, "Argument [session] may not be null"); checkNotNull(authenticator, "Please set an authenticator"); UsernamePasswordMessage usernamePasswordMessage = new UsernamePasswordMessage(); session.read(usernamePasswordMessage); logger.debug("SESSION[{}] Receive credentials: {}", session.getId(), usernamePasswordMessage .getUsernamePasswordCredentials()); try { authenticator.doAuthenticate(usernamePasswordMessage.getUsernamePasswordCredentials(), session); } catch (AuthenticationException e) { session.write(new UsernamePasswordResponseMessage(false)); throw e; } session.write(new UsernamePasswordResponseMessage(true)); }
userManager.addUser("fucksocks", "fucksocks"); ((UsernamePasswordMethod) method).setAuthenticator(new UsernamePasswordAuthenticator (userManager));
@Override public void doMethod(Session session) throws SocksException, IOException { checkNotNull(session, "Argument [session] may not be null"); checkNotNull(authenticator, "Please set an authenticator"); UsernamePasswordMessage usernamePasswordMessage = new UsernamePasswordMessage(); session.read(usernamePasswordMessage); logger.debug("SESSION[{}] Receive credentials: {}", session.getId(), usernamePasswordMessage .getUsernamePasswordCredentials()); try { authenticator.doAuthenticate(usernamePasswordMessage.getUsernamePasswordCredentials(), session); } catch (AuthenticationException e) { session.write(new UsernamePasswordResponseMessage(false)); throw e; } session.write(new UsernamePasswordResponseMessage(true)); }
userManager.addUser("fucksocks", "fucksocks"); ((UsernamePasswordMethod) method).setAuthenticator(new UsernamePasswordAuthenticator (userManager));
public static SocksProxyServer newUsernamePasswordAuthenticationServer(int port, User... users) { SocksProxyServer proxyServer = new BasicSocksProxyServer(Socks5Handler.class, port); proxyServer.setBufferSize(BUFFER_SIZE); proxyServer.setTimeout(TIMEOUT); UsernamePasswordAuthenticator authenticator = new UsernamePasswordAuthenticator(); for (User user : users) { authenticator.addUser(user.getUsername(), user.getPassword()); } proxyServer.setSupportMethods(new UsernamePasswordMethod(authenticator)); return proxyServer; }
@Override public void doAuthenticate(Credentials credentials, Session session) throws AuthenticationException { if (credentials instanceof UsernamePasswordCredentials) { String username = credentials.getUserPrincipal().getName(); String password = credentials.getPassword(); User user = userManager.check(username, password); if (user == null) { authenticationFailed(session); } authenticationSuccess(session, user); } else { throw new AuthenticationException("Only support Username/Password Authentication"); } }