SocksClient.createConnection تەلەپ قىلىنغان destination غا ئۇلانغان stream نى قايتۇرىدۇ. HTTPS ئۈچۈن بۇ stream HTTP تەلەپنى يۆتكىشتىن ئىلگىرى يەنىلا TLS handshake غا موھتاج.

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 proxy تىزىملىكى proxy host ۋە port ئۈچۈن نامزاتلارنى تەمىنلەيدۇ. onTransportError ۋە onResponseBytes مەۋجۇت پروگراممىغا تەۋە؛ ئىككىنچىسى HTTP جاۋاب stream نى تەھلىل قىلىشى كېرەك. TLS سانلىق مەلۇمات پارچىلىرى مۇستەقىل ھالدا تولۇق HTTP ئۇچۇرلىرى ئەمەس.

servername destination نىڭ DNS ئىسمى. Node نىڭ تۆۋەن دەرىجىلىك tls.connect ى سۈكۈتتىكى ھالەتتە SNI نى ئاچمايدۇ، proxy hostname بولسا تور بېكەتنىڭ گۇۋاھنامە كىملىكى ئەمەس.

گۇۋاھنامە دەلىللەشنى ئوچۇق ساقلاڭ. ئۇلانغان socket نى بېرىش TLS كىملىكىنى ساقلاپ، تور بېكەتكە ئايرىم بىۋاسىتە ئۇلىنىش ئېچىشتىن ساقلىنىدۇ.

SOCKS ۋاقىت چېكى بۇ سۆھبەتنى چەكلەيدۇ. كېيىنكى TLS ۋە پروگرامما ئالماشتۇرۇشى يەنىلا چاقىرغۇچى نىيەتلىگەن ۋاقىت چېكى، بىكار قىلىش ۋە تازىلاش سىياسىتىگە موھتاج.

مۇناسىۋەتلىك ماقالىلەر