如何构建特洛伊木马协议
// 具体的线程接受请求 private static final int LISTEN_PORT = 7890; private static final String TROJAN_HOST = "xxx.xxx.xxx"; private static final int TROJAN_PORT = 443; private static final String password = "password1";
public static void main(String[] args) { try (ServerSocket serverSocket = new ServerSocket(LISTEN_PORT)) { System.out.println("Trojan proxy server listening on port " + LISTEN_PORT); while (true) { Socket clientSocket = serverSocket.accept(); new Thread(new ClientHandler(clientSocket)).start(); } } catch (Exception e) { e.printStackTrace(); } }
/**
- 具体的线程接受请求
- +-----------------------+---------+----------------+---------+----------+
- | hex(SHA224(password)) | CRLF | Trojan Request | CRLF | Payload |
- +-----------------------+---------+----------------+---------+----------+
- | 56 | X'0D0A' | Variable | X'0D0A' | Variable |
- +-----------------------+---------+----------------+---------+----------+
- where Trojan Request is a SOCKS5-like request:
- +-----+------+----------+----------+
- | CMD | ATYP | DST.ADDR | DST.PORT |
- +-----+------+----------+----------+
- | 1 | 1 | Variable | 2 |
- +-----+------+----------+----------+ */ static class ClientHandler implements Runnable { private final Socket clientSocket;
public ClientHandler(Socket clientSocket) { this.clientSocket = clientSocket; }
@Override public void run() { long threadId = Thread.currentThread().getId(); String requestLine = ""; try (InputStream clientInput = clientSocket.getInputStream(); OutputStream clientOutput = clientSocket.getOutputStream()) { TrojanWrapperRequest trojanWrapperRequest = new TrojanWrapperRequest(); TrojanWrapperRequest.TrojanRequest trojanRequest = new TrojanWrapperRequest.TrojanRequest(); // 设置密码和请求 { trojanRequest.setCmd(0X01); String …
内容来源: trojan-gfw/trojan