Обавијање SOCKS утичнице TLS-ом у Node.js
Обавијте одредишни ток који враћа socks пакет помоћу tls.connect и сачувајте назив хоста веб странице за SNI и проверу сертификата.
SocksClient.createConnection враћа ток повезан са траженим одредиштем. За HTTPS тај ток још треба TLS руковање пре него што пренесе 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`
);
});
Листа SOCKS5 проксија даје кандидате за хост и порт проксија. onTransportError и onResponseBytes припадају постојећој апликацији; други мора да парсира ток HTTP одговора. TLS делови података нису самостално комплетне HTTP поруке.
servername је DNS назив одредишта. Nodeov нискоразински tls.connect не укључује SNI по задатом, а назив хоста проксија није идентитет сертификата веб странице.
Оставите проверу сертификата укљученом. Достављање повезане утичнице избегава отварање засебне директне везе према веб страници уз очување њеног TLS идентитета.
SOCKS тајмаут ограничава то преговарање. Каснија размена TLS-а и апликације и даље захтева намеравани тајмаут, отказивање и политику чишћења позиваоца.