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 کا وقتی حد اس گفت و شنید کو محدود کرتا ہے۔ بعد کے TLS اور ایپلیکیشن تبادلے کے لیے ابھی بھی کال کرنے والے کا مطلوبہ وقتی حد، منسوخی اور صفائی کی پالیسی درکار ہے۔