SocksClient.createConnection сұралған межеге қосылған ағынды қайтарады. HTTPS үшін бұл ағынға HTTP сұрауын тасымалдамас бұрын әлі TLS қол алысуы қажет.

import { SocksClient } from 'socks';
import tls from 'node:tls';

const targetHost = 'service.example';
const info = await SocksClient.createConnection({
  proxy: { host: 'proxy.example', port: 1080, type: 5 },
  command: 'connect',
  destination: { host: targetHost, port: 443 },
  timeout: 10000,
});
const secure = tls.connect({
  socket: info.socket,
  servername: targetHost,
});
secure.on('error', onTransportError);
secure.on('data', onResponseBytes);
secure.once('secureConnect', () => {
  secure.write(
    `GET /data HTTP/1.1\r\nHost: ${targetHost}\r\nConnection: close\r\n\r\n`
  );
});

SOCKS5 проксилер тізімі прокси хосты мен порты үшін үміткерлерді ұсынады. onTransportError мен onResponseBytes қолданыстағы қосымшаға тиесілі; екіншісі HTTP жауап ағынын талдауы керек. TLS деректер бөліктері дербес толық HTTP хабарламалары емес.

servername — меженің DNS атауы. Node-ның төменгі деңгейлі tls.connect әдепкіде SNI қоспайды, ал прокси хост атауы сайттың сертификат сәйкестігі емес.

Сертификатты тексеруді қосулы қалдырыңыз. Қосылған сокетті беру сайтқа жеке тікелей қосылым ашуды болдырмай, оның TLS сәйкестігін сақтайды.

SOCKS тайм-ауты сол келіссөзді шектейді. Кейінгі TLS және қосымша алмасуы әлі де шақырушының көздеген тайм-аутын, бас тартуын және тазалау саясатын қажет етеді.

Қатысты мақалалар