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 ප්රතිචාර stream එක විශ්ලේෂණය කළ යුතුය. TLS දත්ත කැබලි ස්වාධීනව සම්පූර්ණ HTTP පණිවිඩ නොවේ.
servername යනු destination හි DNS නාමයයි. Node හි පහළ මට්ටමේ tls.connect පෙරනිමියෙන් SNI සක්රීය නොකරයි, සහ proxy hostname යනු වෙබ් අඩවියේ සහතික අනන්යතාවය නොවේ.
සහතික සත්යාපනය සක්රීයව තබන්න. සම්බන්ධ වූ socket ලබා දීමෙන් TLS අනන්යතාවය රඳවා ගනිමින් වෙබ් අඩවියට වෙනම සෘජු සම්බන්ධතාවයක් විවෘත කිරීම වළක්වයි.
SOCKS කාල සීමාව එම සාකච්ඡාව සීමා කරයි. පසුව සිදුවන TLS සහ යෙදුම් හුවමාරුවට තවමත් අමතන්නා අදහස් කළ කාල සීමාව, අවලංගු කිරීම සහ පිරිසිදු කිරීමේ ප්රතිපත්තිය අවශ්ය වේ.