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

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

Lista SOCKS5 proksija daje kandidate za host i port proksija. onTransportError i onResponseBytes pripadaju postojećoj aplikaciji; drugi mora da parsira tok HTTP odgovora. TLS delovi podataka nisu samostalno kompletne HTTP poruke.

servername je DNS naziv odredišta. Nodeov niskorazinski tls.connect ne uključuje SNI po zadatom, a naziv hosta proksija nije identitet sertifikata web stranice.

Ostavite proveru sertifikata uključenom. Dostavljanje povezane utičnice izbegava otvaranje zasebne direktne veze prema web stranici uz očuvanje njenog TLS identiteta.

SOCKS tajmaut ograničava to pregovaranje. Kasnija razmena TLS-a i aplikacije i dalje zahteva nameravani tajmaut, otkazivanje i politiku čišćenja pozivaoca.

Povezani članci