Ukumboza i-SOCKS socket nge-TLS ku-Node.js
Komboza i-destination stream ebuyiswa yi-socks package nge-tls.connect futhi gcina i-hostname yewebhusayithi ye-SNI nokuqinisekiswa kwe-certificate.
I-SocksClient.createConnection ibuyisela i-stream exhunywe kwi-destination oyicele. Nge-HTTPS, leyo stream isidinga i-TLS handshake ngaphambi kokuthwala isicelo se-HTTP.
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`
);
});
Uhlu lwama-proxy e-SOCKS5 inikeza abazobenza i-host ne-port ye-proxy. I-onTransportError ne-onResponseBytes ingezohlelo olukhona; eyesibili kufanele ihlaziye i-stream yempendulo ye-HTTP. Izingcezu zedatha ye-TLS akuyona imilayezo ye-HTTP ephelele ngokuzimela.
I-servername igama le-DNS le-destination. I-tls.connect yezinga eliphansi ye-Node ayivuli i-SNI ngokuzenzakalelayo, futhi i-hostname ye-proxy ayiyona identity ye-certificate yewebhusayithi.
Shiya ukuqinisekiswa kwe-certificate kuvuliwe. Ukunikeza i-socket exhunyiwe kugwema ukuvula uxhumano oluqondile olwehlukile oluya kuwebhusayithi kuyilapho kugcinwa i-TLS identity yayo.
Isikhathi se-SOCKS sikhawulela leyo ngxoxo. Ukushintshana kwe-TLS nohlelo kamuva kusadinga isikhathi, ukukhansela kanye nenqubomgomo yokuhlanza ehlosiwe umcimi.