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 प्रॉक्सी सूची प्रॉक्सी host और port के लिए उम्मीदवार देता है। onTransportError और onResponseBytes मौजूदा एप्लिकेशन के हैं; दूसरे को HTTP response stream पार्स करना होता है। TLS डेटा खंड स्वतंत्र रूप से पूर्ण HTTP संदेश नहीं।

servername destination का DNS नाम है। Node का निम्न-स्तरीय tls.connect डिफ़ॉल्ट रूप से SNI सक्षम नहीं करता, और प्रॉक्सी hostname वेबसाइट की प्रमाणपत्र पहचान नहीं है।

प्रमाणपत्र सत्यापन चालू रखें। जुड़ा हुआ socket देने से वेबसाइट के लिए अलग सीधा कनेक्शन खोलने से बचा जाता है और उसकी TLS पहचान बनी रहती है।

SOCKS timeout उस बातचीत को सीमित करता है। बाद के TLS और एप्लिकेशन आदान-प्रदान के लिए अब भी कॉलर का इच्छित timeout, रद्दीकरण और सफ़ाई नीति चाहिए।

संबंधित लेख