如何测试服务是否正在使用Node.js侦听TCP?

时间:2013-08-02 03:02:49

标签: node.js tcp

摘要:如何使用Node.js查看是否正在侦听给定端口?

详情

我正在为Node中的基于HTTP的应用程序编写测试。

我使用http.Server扩展了节点util.inherits,并在生成的“类”中将标准.listen()功能包装在我自己的.start()方法中。此方法执行一些设置(例如连接到MongoDB),然后在一切都好的时候调用http.Server.listen(port, cb)

我的问题:我想编写一个调用.start()的测试,然后检查服务器是否确实正在侦听指定的端口。我想这样做而不向服务器发送HTTP请求到字段。我只想测试服务器正在监听。

不幸的是,我不熟悉TCP,但考虑到我的端口扫描经验和netstat以及那种性质的事情,我觉得Node <{3}中有某些东西包将让我这样做。这可能吗?

3 个答案:

答案 0 :(得分:7)

使用net.connect():

var net = require('net');
var client = net.connect({port: 8124},
function() { //'connect' listener
  console.log('client connected');
  client.end();
});
net模块

上的

Node.JS documentation

答案 1 :(得分:3)

我不知道node.js提供了什么,但是这里有一种方法可以测试某些东西是否正在监听端口而没有与它建立连接:

  

此技术通常称为半开扫描,因为您不打开完整的TCP连接。您发送一个SYN数据包,就像打算打开一个真正的连接,然后等待响应一样。 SYN / ACK表示端口正在侦听(打开),而RST(重置)表示非侦听器。

这来自nmap端口扫描工具,如果您对低级TCP / IP内容感兴趣,可以在其网站上找到更多内容。

答案 2 :(得分:2)

为什么呢?如果你想要连接它,你只关心某些东西在听。因此,连接到它,并处理错误。 “不要测试,使用。”这适用于任何资源。测试它是否可用的最佳方法是尝试使用它。