有没有一种方法可以为Node.js HTTPS请求设置源端口?

3
有没有一种方法可以设置节点js https请求的源端口?我不是在问目的地,而是源,即用于发送请求的端口。
上下文是我正在尝试从特定端口发送https请求,而不是随机端口,从而允许锁定iptables。节点未以root身份运行,因此端口不是443。
更新: 似乎Node中存在一个错误。选项localAddress和localPort不起作用,至少对于TLS套接字来说是这样。
更新: 去年发现了一个类似的问题。答案是“不要那样做”,这似乎很愚蠢,因为节点应该是一个通用工具。 Nodejs TCP连接客户端端口分配

你想改变系统默认端口,还是只想为你的应用程序更改端口? - mugabits
在客户端访问的链接末尾添加“:80”(将80替换为您想要的任何端口)。 - Oisin
我想为特定的https请求设置源端口。由于我的https服务器不是root,因此它正在监听8443端口。在某些情况下,我的服务器需要向远程服务器发出https请求。在这种情况下,我希望请求从本地端口8444发送。我该如何实现这一点?我没有看到源端口的参数。有一个“默认值”,但似乎没有任何作用。 - user3356715
这只是一个猜测:也许尝试设置https.request对象的localAddress属性来包含一个端口。https://nodejs.org/api/https.html#https_https_request_options_callback - binarymax
在你输入的同时,我正在尝试这个。到目前为止还没有成功。参数localAddress没有很好的文档说明,所以不确定如何使用它。 - user3356715
确实,它不起作用。对于192.168.0.6:8444,我得到了throw new TypeError('localAddress must be a valid IP: ' + localAddress);的错误,但是对于没有端口的192.168.0.6,它可以正常工作。 - binarymax
3个回答

3
这个功能似乎没有文档记录,但是你可以通过在 https.request 的 options 参数中设置 localAddresslocalPort 两者来实现。
更多信息请查看这里的代码: https://github.com/nodejs/node/blob/b85a50b6da5bbd7e9c8902a13dfbe1a142fd786a/lib/net.js#L916 以下是一个基本示例:
var https = require('https');

var options = {
  hostname: 'example.com',
  port: 8443,
  localAddress : '192.168.0.1',
  localPort: 8444
};

var req = https.request(options, function(res) {
    console.log(res);
});

req.end();

我无法让localPort正常工作。已尝试使用代理和不使用代理。仍然在iptables日志中看到随机端口。 - user3356715

1

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接