有没有办法为节点js-https请求设置源端口

Is there a way to set the source port for a node js https request?

本文关键字:设置 请求 js-https 节点 有没有      更新时间:2024-05-06

有没有办法为node-js-https请求设置源端口?我问的不是目的地,而是来源(用于发送请求的端口)。

上下文是我试图从特定端口而不是随机端口发送https请求,从而允许锁定iptables。节点没有以root身份运行,因此端口不是443。

更新:节点中似乎有一个错误。选项localAddress和localPort不起作用,至少对于TLS套接字是这样。

更新:去年发现了一个类似的问题。答案是"不要那样做",考虑到节点被认为是一个通用工具,这似乎很愚蠢。Nodejs TCP连接客户端端口分配

该功能似乎没有文档,但您可以通过为https.request.中的选项参数同时设置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();

不幸的是,Node似乎不支持绑定客户端端口。显然,这不是一个经常使用的功能,但这是可能的。这个链接很好地解释了端口绑定。https://blog.cloudflare.com/cloudflare-now-supports-websockets/不知道如何让nodejs人员考虑这个更改。

您可以在http中使用localPort选项。请求配置源端口的选项。它似乎从v14.x LTS开始就可用了。我用Node v18.12.0进行了测试,它很有效。:)

https://nodejs.org/docs/latest-v14.x/api/http.html#http_http_request_url_options_callback

options.localPort <number> Local port to connect from.