איינפֿאַכלען אַ 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 נאָמען פֿון ציל. Node'ס tls.connect אויף נידעריקן ניוואָ צינדט ניט אָן SNI ביי פֿאַרבאַשטעל, און דער פּראָקי האָסט־נאָמען איז ניט די סערטיפֿיקאַט־אידענטיטעט פֿון דער וועבזײַט.
לאָזט סערטיפֿיקאַט־באַשטעטיקונג אָפֿן. צושטעלן דעם פֿאַרבונדענעם סאָקעט פֿאַרמײַדט עפֿענען אַ באַזונדער דירעקטן פֿאַרבינדונג צו דער וועבזײַט בשעת מען האַלט איר TLS אידענטיטעט.
דער SOCKS צײַט־באַגרענעץ באַגרענעצט די פֿאַרהאַנדלונג. דער שפּעטערדיקער TLS און אַפּליקאַציע־אויסטויש דאַרף נאָך דעם באַצילטן צײַט־באַגרענעץ, אַנולירונג און רייניקונג־פּאָליטיק פֿון דעם רופֿער.