SocksClient.createConnection hurudisha mtiririko uliounganishwa na lengo lililoombwa. Kwa HTTPS, mtiririko huo bado unahitaji TLS handshake kabla ya kubeba ombi la HTTP.

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

Orodha ya proksi za SOCKS5 hutoa wagombea wa mwenyeji na bandari ya proksi. onTransportError na onResponseBytes ni za programu iliyopo; ya pili lazima ichanganue mtiririko wa jibu la HTTP. Vipande vya data vya TLS si ujumbe kamili wa HTTP kwa kujitegemea.

servername ni jina la DNS la lengo. tls.connect ya kiwango cha chini ya Node haiwezeshi SNI kwa chaguo-msingi, na jina la mwenyeji wa proksi si utambulisho wa cheti cha tovuti.

Acha uthibitishaji wa cheti ukiwa umewashwa. Kutoa socket iliyounganishwa huepuka kufungua muunganisho tofauti wa moja kwa moja kwa tovuti huku ukihifadhi utambulisho wake wa TLS.

Muda wa SOCKS hupunguza majadiliano hayo. Mabadilishano ya baadaye ya TLS na programu bado yanahitaji muda, kughairi na sera ya kusafisha zinazokusudiwa na mpigaji simu.

Makala zinazohusiana