Node.js ичинде SOCKS сокетин TLS менен ороп коюу
socks пакети кайтарган багыт агымын tls.connect менен ороп, SNI жана сертификатты текшерүү үчүн сайттын хост атын сактаңыз.
SocksClient.createConnection суралган багытка туташкан агымды кайтарат. HTTPS үчүн бул агым HTTP сурамын ташырдан мурун дагы эле TLS кол кармашуусун талап кылат.
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 аты. Node'дун төмөнкү деңгээлдеги tls.connect демейде SNI'ни күйгүзбөйт, ал эми проксинин хост аты сайттын сертификат инсандыгы эмес.
Сертификат текшерүүнү күйүк тутуңуз. Туташкан сокетти берүү сайтка өзүнчө түз туташуу ачуудан качтырат жана анын TLS инсандыгын сактайт.
SOCKS тайм-ауту ошол сүйлөшүүнү чектейт. Кийинки TLS жана колдонмо алмашуусу дагы эле чакыруучунун көздөгөн тайм-аутун, жокко чыгаруусун жана тазалоо саясатын талап кылат.