በ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 እና የመተግበሪያ ልውውጥ አሁንም የጠሪውን የታሰበ ጊዜ ገደብ፣ ስረዛ እና የማጽዳት መመሪያ ይፈልጋል።