Я пытаюсь реализовать TCP-прокси в Node JS. У меня есть только некоторый опыт работы с Javascript, поэтому я столкнулся с множеством проблем на этом пути. Я много искал этот, но не повезло.
Я хочу реализовать двухшаговое TCP-соединение для HTTPS-прокси. Вот часть моего кода.
var net = require('net');
var server = net.createServer(function(clientSock) {
var connected = false;
var serverSock;
clientSock.on('data', function(clientData) {
if (connected) {
// Send future messages if is connected
serverSocet.write(clientData);
} else {
var host = // get from data
var port = // get from data
if (clientData is a CONNECT request) {
// Create a new socket to server
if (!serverSock) {
serverSock = new net.Socket();
serverSock.connect(port, host, function() {
// Send the CONNECT request (Client Hello)
serverSock.write(clientData);
connected = true;
clientSock.write('HTTP/1.1 200 OK\r\n');
});
serverSock.on('data', function(serverData) {
clientSock.write(serverData);
});
}
}
});
});
Я использовал Wireshark для захвата пакетов, отправляемых при посещении https://www.google.com. Если я не использую свой прокси-сервер, сообщение «Client Hello» отправляется в TLS v1.2. Но если я использую свой прокси, он отправляется по SSL. Сервер всегда отклоняет мой запрос CONNECT и отправляет обратно запрос на сброс.
Я также попробовал TLS API в Node JS. Сервер принял мой запрос CONNECT, но всегда просит меня начать новый сеанс после обмена ключами. Браузер закроет сокет и создаст новый сокет. Но он так и не загрузил страницу...
Я потратил целый день на эту единственную проблему. Я считаю, что могу использовать сокет TCP для реализации HTTP-туннеля. Пожалуйста, помогите... Большое спасибо!!