SocksClient.createConnection vraća tok povezan sa traženim odredištem. Za HTTPS taj tok još treba TLS rukovanje prije nego prenese HTTP zahtjev.

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`
  );
});

Popis SOCKS5 proxyja daje kandidate za host i port proxyja. onTransportError i onResponseBytes pripadaju postojećoj aplikaciji; drugi mora parsirati tok HTTP odgovora. TLS dijelovi podataka nisu samostalno potpune HTTP poruke.

servername je DNS naziv odredišta. Nodeov niskorazinski tls.connect ne uključuje SNI prema zadanim postavkama, a naziv hosta proxyja nije identitet certifikata web stranice.

Ostavite provjeru certifikata uključenom. Dostavljanje povezane utičnice izbjegava otvaranje zasebne izravne veze prema web stranici uz očuvanje njezina TLS identiteta.

SOCKS tajmaut ograničava to pregovaranje. Kasnija razmjena TLS-a i aplikacije i dalje zahtijeva namjeravani tajmaut, otkazivanje i politiku čišćenja pozivatelja.

Povezani članci