Kufunika Socket ya SOCKS na TLS katika Node.js
Funika mtiririko wa lengo unaorejeshwa na kifurushi cha socks kwa tls.connect na hifadhi jina la mwenyeji wa tovuti kwa SNI na uthibitishaji wa cheti.
SocksClient.createConnection hurudisha mtiririko uliounganishwa na lengo lililoombwa. Kwa HTTPS, mtiririko huo bado unahitaji TLS handshake kabla ya kubeba ombi la 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`
);
});
Orodha ya proksi za SOCKS5 hutoa wagombea wa mwenyeji na bandari ya proksi. onTransportError na onResponseBytes ni za programu iliyopo; ya pili lazima ichanganue mtiririko wa jibu la HTTP. Vipande vya data vya TLS si ujumbe kamili wa HTTP kwa kujitegemea.
servername ni jina la DNS la lengo. tls.connect ya kiwango cha chini ya Node haiwezeshi SNI kwa chaguo-msingi, na jina la mwenyeji wa proksi si utambulisho wa cheti cha tovuti.
Acha uthibitishaji wa cheti ukiwa umewashwa. Kutoa socket iliyounganishwa huepuka kufungua muunganisho tofauti wa moja kwa moja kwa tovuti huku ukihifadhi utambulisho wake wa TLS.
Muda wa SOCKS hupunguza majadiliano hayo. Mabadilishano ya baadaye ya TLS na programu bado yanahitaji muda, kughairi na sera ya kusafisha zinazokusudiwa na mpigaji simu.