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 timeout ಆ ಮಾತುಕತೆಯನ್ನು ಮಿತಿಗೊಳಿಸುತ್ತದೆ. ನಂತರದ TLS ಮತ್ತು ಅಪ್ಲಿಕೇಶನ್ ವಿನಿಮಯಕ್ಕೆ ಇನ್ನೂ ಕರೆ ಮಾಡುವವರ ಉದ್ದೇಶಿತ timeout, ರದ್ದುಗೊಳಿಸುವಿಕೆ ಮತ್ತು ಸ್ವಚ್ಛಗೊಳಿಸುವ ನೀತಿ ಬೇಕು.