2014-09-03 114 views
4

如何指定使用Node.js的出站TCP连接的源端口/本地端口本地端口?这是支持某些防火墙规则所必需的。指定TCP套接字客户端连接

net.connect({port: PORT, host: HOST}, callback) 

我希望在上面的调用中有一个额外的参数'localPort'。但看起来API不处理,以下不起作用。

net.connect({port: PORT, host: HOST, localPort: 12345}, callback) 

使用Java,我会做类似下面:

Socket s = new Socket(); 
s.bind(new InetSocketAddress("179.11.123.102", 5000)); 
s.connect(new InetSocketAddress("178.1.2.102", 1234)); 

什么是Node.js的相同呢?

+0

什么?套接字不能同时用于监听和连接。 – freakish 2014-09-03 12:11:19

+0

这不是我的意思,指定出站连接的本地端口 – 2014-09-03 12:16:02

+0

好的。那么你有什么尝试?这是非常有据可查的。 – freakish 2014-09-03 12:20:56

回答

5

根据错误报告 “net.connect() should accept a localPort option”,是最近添加的功能:

目前,net.connect有一个参数将localAddress,但它也应该有一个将localPort ...

这是只是还没有发布... [它]应该包含在v0.11.13中

它在this commit中于2月17日添加,并应在下一个版本的Node中可用。如果你不能等待,你可以修补差异直接进入0.10.31,它应该工作的,是因为C++ Bind function at the time of the 0.10.31 release支持端口参数(补丁只是增强了JavaScript的层使用是C++的说法)。

+0

谢谢。如果建议将此修补程序修补到最新的稳定版本中,有哪些建议?另外我看到只有js文件更改。我相信也应该有C++文件的变化。这些文件是分开跟踪的吗? – 2014-09-03 14:29:04

+0

@PhaniKumar不要抱我承担责任,如果出了问题(':P'),但是,是的,它看起来像你可以推说成当前版本就好了。我认为'self._handle.bind'指的是一些C网络功能'bind',它可以带一个地址和一个端口。节点先前使用了仅地址变体,但它也可能已经采用端口参数(节点根本不使用该参数)。 – apsillers 2014-09-03 14:40:06

+0

@PhaniKumar证实:[C++'在0.10.31释放的时间Bind'功能](https://github.com/joyent/node/blob/7fabdc23d843cb705d2d0739e7bbdaaf50aa3292/src/tcp_wrap。cc#L269-L284)(在该补丁中用作'self._handle.bind')支持将端口号作为第二个参数:'int port = args [1] - > Int32Value()' – apsillers 2014-09-03 14:45:42