Node.js da SOCKS soketini TLS bilan o'rash
socks paketi qaytaradigan destination stream ni tls.connect bilan o'rang va SNI hamda sertifikat tekshiruvi uchun sayt hostname ini saqlab qoling.
SocksClient.createConnection so'ralgan destination ga ulangan stream qaytaradi. HTTPS uchun bu stream HTTP so'rovini uzatishdan oldin hali ham TLS handshake ga muhtoj.
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 ro'yxati proxy host va port uchun nomzodlar beradi. onTransportError va onResponseBytes mavjud ilovaga tegishli; ikkinchisi HTTP javob stream ini tahlil qilishi kerak. TLS ma'lumot bo'laklari mustaqil ravishda to'liq HTTP xabarlari emas.
servername destination ning DNS nomi. Node ning past darajadagi tls.connect i sukut bo'yicha SNI ni yoqmaydi, proxy hostname esa saytning sertifikat identifikatori emas.
Sertifikat tekshiruvini yoqilgan holda qoldiring. Ulangan soketni taqdim etish TLS identifikatorini saqlab qolgan holda saytga alohida to'g'ridan-to'g'ri ulanish ochishdan saqlaydi.
SOCKS taym-auti bu muzokarani cheklaydi. Keyingi TLS va ilova almashinuvi hali ham chaqiruvchi ko'zlagan taym-aut, bekor qilish va tozalash siyosatini talab qiladi.