Node.js मा SOCKS सकेटलाई TLS सँग बेर्ने
socks प्याकेजले फर्काउने destination stream लाई tls.connect सँग बेर्नुहोस् र SNI तथा प्रमाणपत्र प्रमाणीकरणका लागि वेबसाइटको hostname कायम राख्नुहोस्।
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, रद्दीकरण र सफाइ नीति चाहिन्छ।