SocksClient.createConnection, istenen hedefe bağlı bir akış döndürür. HTTPS için bu akışın HTTP isteğini taşımadan önce hâlâ bir TLS el sıkışmasına ihtiyacı vardır.

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 listesi proxy ana makinesi ve bağlantı noktası için adaylar sağlar. onTransportError ve onResponseBytes mevcut uygulamaya aittir; ikincisi HTTP yanıt akışını ayrıştırmalıdır. TLS veri parçaları tek başına tam HTTP iletileri değildir.

servername hedefin DNS adıdır. Node'un düşük seviyeli tls.connect'i SNI'yı varsayılan olarak etkinleştirmez ve proxy ana makine adı sitenin sertifika kimliği değildir.

Sertifika doğrulamasını açık tutun. Bağlı soketi vermek, sitenin TLS kimliğini korurken ona ayrı bir doğrudan bağlantı açmayı önler.

SOCKS zaman aşımı bu görüşmeyi sınırlar. Sonraki TLS ve uygulama alışverişi hâlâ çağıranın amaçladığı zaman aşımını, iptali ve temizleme politikasını gerektirir.

İlgili makaleler