Node.js இல் SOCKS சாக்கெட்டை TLS மூலம் மடக்குதல்
socks தொகுப்பு திருப்பித் தரும் destination stream ஐ tls.connect மூலம் மடக்கி, SNI மற்றும் சான்றிதழ் சரிபார்ப்புக்காக வலைத்தளத்தின் hostname ஐ தக்கவைக்கவும்.
SocksClient.createConnection கோரப்பட்ட destination உடன் இணைக்கப்பட்ட stream ஐ திருப்பித் தருகிறது. HTTPS க்கு அந்த stream HTTP கோரிக்கையை எடுத்துச் செல்லும் முன் இன்னும் TLS handshake தேவை.
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 proxy பட்டியல் proxy host மற்றும் port க்கு வேட்பாளர்களை வழங்குகிறது. onTransportError மற்றும் onResponseBytes தற்போதைய பயன்பாட்டுக்குரியவை; இரண்டாவது HTTP response stream ஐ பகுப்பாய்வு செய்ய வேண்டும். TLS தரவுத் துண்டுகள் தனித்தனியாக முழுமையான HTTP செய்திகள் அல்ல.
servername என்பது destination இன் DNS பெயர். Node இன் குறைந்த நிலை tls.connect இயல்பாகவே SNI ஐ இயக்காது, மேலும் proxy hostname வலைத்தளத்தின் சான்றிதழ் அடையாளம் அல்ல.
சான்றிதழ் சரிபார்ப்பை இயக்கத்தில் வைக்கவும். இணைக்கப்பட்ட socket ஐ வழங்குவது TLS அடையாளத்தைப் பேணிக்கொண்டே வலைத்தளத்திற்கு தனி நேரடி இணைப்பைத் திறப்பதைத் தவிர்க்கிறது.
SOCKS நேர வரம்பு அந்த பேச்சுவார்த்தையை வரம்பிடுகிறது. பிந்தைய TLS மற்றும் பயன்பாட்டுப் பரிமாற்றத்திற்கு அழைப்பவரின் நோக்கம் கொண்ட நேர வரம்பு, ரத்து மற்றும் சுத்தம் செய்யும் கொள்கை இன்னும் தேவை.