Прокси-сервер: Как проанализировать https-запрос и ответ от сокетного соединения - PullRequest
0 голосов
/ 08 июля 2019

Я создаю простой прокси в Java. Я использую ServerSocket , чтобы запустить его на определенном порту и направить полученные запросы в список внешних прокси. Итак, теоретически мне не нужно анализировать запрос и ответ, просто принимает полученные байты и направляет их в конечный пункт назначения. Моя цель - выбрать целевой прокси с некоторой логикой приложения. Для этого было бы очень полезно знать:

  • Ip клиента, который подключается к моему прокси
  • Http код ответа, который я получаю от окончательного прокси

Для "нормального" http-соединения это возможно. Когда я читаю данные, я могу их проанализировать и получить необходимую информацию. С https-соединением все данные зашифрованы, поэтому я думаю, что это невозможно. Любой может подтвердить это и в конечном итоге предложить способ обойти эту « проблему »?

Вот пример кода:

//start my proxy
ServerSocket ss = new ServerSocket(portNum);
Socket client= ss.accept();

//connection arrived : get pointer to streams
final InputStream from_client = client.getInputStream();
final OutputStream to_client = client.getOutputStream();

//Try to open socket to destination proxy
Socket server = null;
try {
    server = new Socket([destination proxy host], [destination proxy port]);
} catch (IOException e) {
    PrintWriter out = new PrintWriter(new OutputStreamWriter(to_client));
    out.println("Proxy server cannot connect to " + opt.getProxyHost() + ":" + opt.getProxyPort() + ":\n" + e));
    out.flush();
    client.close();

}

some stuff ...

//get streams from destination 
final InputStream from_server = server.getInputStream();
final OutputStream to_server = server.getOutputStream();

//in a separate Thread :

try {
        //transfer bytes from client to server ( java >= 9 )
        //**NOTE : the https connection is encrypted, is not possibile to parse the request received, just route it**
    from_client.transferTo(to_server);

} catch (IOException e) {

    //Manage exception
}

Ответ имеет ту же проблему:

int bytes_read;
try {

//**NOTE : the https connection is encrypted, is not possibile to parse the response received, just route it back**

    from_server.transferTo(to_client);

} catch (IOException e) {

  //Manage exception
}

Спасибо Davide

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...