4

摘要:如何使用 Node.js 来查看给定端口上是否有东西在监听?

详情

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

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

我的问题:我想编写一个调用.start()然后检查服务器是否确实在侦听指定端口的测试。我想在不向服务器发送 HTTP 请求的情况下执行此操作。我只想测试服务器是否在监听。

不幸的是,我对 TCP 不熟悉,但鉴于我在端口扫描和类似netstat事物方面的经验,我觉得Node 的net包中的某些东西可以让我做到这一点。这可能吗?

4

3 回答 3

9

使用 net.connect():

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

net模块上的Node.JS 文档

于 2013-08-02T03:34:11.473 回答
3

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

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

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

于 2013-08-02T11:12:39.130 回答
2

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

于 2013-08-02T09:50:54.203 回答