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, रद्दीकरण आणि स्वच्छता धोरण अजूनही आवश्यक आहे.

संबंधित लेख