簡體   English   中英

"通過nodejs上的代理的TCP套接字客戶端"

[英]TCP socket client through proxy on nodejs

我需要與 smtp 服務器建立 tcp 套接字連接。 是否可以通過nodejs上的代理服務器連接? 有沒有可用的 npm 模塊? 我根本找不到。

var net = require('net');

var HOST = '127.0.0.1';
var PORT = 6969;

var client = new net.Socket();
client.connect(PORT, HOST, function() {
    console.log('CONNECTED TO: ' + HOST + ':' + PORT);
    client.write('I am here!');
});

// Add a 'data' event handler for the client socket
// data is what the server sent to this socket
client.on('data', function(data) {

    console.log('DATA: ' + data);

});

// Add a 'close' event handler for the client socket
client.on('close', function() {
    console.log('Connection closed');
});

net.sockettls.connectdgram沒有代理支持。

與代理一起使用它的最簡單方法是用代理proxychains或類似的東西替換一些libc函數。

var client = require('tls')
.connect(443, 'www.facebook.com', function() {
  console.log('connected');
  client.write('hello');
})
.on('data', function(data) {
  console.log('received', data.toString());
})
.on('close', function() {
  console.log('closed');
});

proxychains node fit.js

connected
received HTTP/1.1 400 Bad Request
...
closed

是的,可以使用其中一個NPM模塊:

http-proxy-agent :HTTP端點的HTTP(s)代理http.Agent實現

https-proxy-agent :HTTPS端點的HTTP(s)代理http.Agent實現

pac-proxy-agent :用於HTTP和HTTPS的PAC文件代理http.Agent實現

socks-proxy-agent :用於HTTP和HTTPS的SOCKS(v4a)代理http.Agent實現

HTTPS代理示例:

var url = require('url');
var WebSocket = require('ws');
var HttpsProxyAgent = require('https-proxy-agent');

// HTTP/HTTPS proxy to connect to
var proxy = process.env.http_proxy || 'http://168.63.76.32:3128';
console.log('using proxy server %j', proxy);

// WebSocket endpoint for the proxy to connect to
var endpoint = process.argv[2] || 'ws://echo.websocket.org';
var parsed = url.parse(endpoint);
console.log('attempting to connect to WebSocket %j', endpoint);

// create an instance of the `HttpsProxyAgent` class with the proxy server information
var opts = url.parse(proxy);

var agent = new HttpsProxyAgent(opts);

// finally, initiate the WebSocket connection
var socket = new WebSocket(endpoint, { agent: agent });

socket.on('open', function () {
  console.log('"open" event!');
  socket.send('hello world');
});

socket.on('message', function (data, flags) {
  console.log('"message" event! %j %j', data, flags);
  socket.close();
});

我希望這有幫助。

除了“net”之外,只要代理服務器支持 HTTPS 流量,您就不需要其他模塊來通過代理服務器使套接字連接到主機。

  1. 創建到代理服務器的套接字連接<\/li>
  2. 發送 HTTP CONNECT 消息通知代理服務器您要連接的主機和端口<\/li>
  3. 如果代理服務器以 HTTP 200 響應進行響應,則代理服務器建立到您所需目標的套接字連接,現在正在中繼套接字之間的流量<\/li>
  4. 如果代理服務器以 200 以外的任何 HTTP 響應進行響應,則連接未建立。<\/li><\/ol>

    即使此過程從 HTTP 開始,但這並不意味着它不適用於 SMTP 流量。 最初的 HTTP 消息僅用於協商連接,之后它只是原始流量。 代理服務器可能會查看您要連接的端口或主機並禁止它。 例如,阻止連接到低於 80 或低於 443 的端口(例如端口 25),因此它實際上取決於代理服務器是否允許連接。

    "

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM