检查几种不同的TCP / IP服务是否可用?

时间:2017-07-23 19:40:46

标签: node.js

我们说我有一个主机名和端口列表,并非所有这些都与HTTP相关。

var config = {
  "checks": [
    {
      "name": "NPM",
      "hostname": "npmjs.com",
      "port": 80
    },
    {
      "name": "AWS",
      "hostname": "aws.amazon.com",
      "port": 443
    },
    {
      "name": "RabbitMQ",
      "hostname": "merry-butterfly.rmq.cloudamqp.com",
      "port": 5671
    }
  ]
}

测试是否可以达到每项服务的有效方法是什么?我的第一个想法是使用典型的类似telnet的方法,我这样做了:

var telnet = require('telnet-client')

config.checks.forEach(function(check) {
  var connection = new telnet()

  var params = {
    host: check.hostname,
    port: check.port,
    negotiationMandatory: false
  }

  connection.on('connect', function() {
    connection.send('GET /', {
      ors: '\r\n', 
      waitfor: '\n'
    }, function(err, data) {
      console.log(err, data);
      connection.end()
    })
  })

  connection.connect(params)
  results.push(result);
});

上述内容似乎有效,但我实际上并不确定要向每个服务发送哪些数据以获取表明该服务可以到达的响应#34;我不会'需要对服务进行身份验证或执行任何操作,只需检查是否可以到达。此外,如果DNS无法访问,它会引发异常:

Error: getaddrinfo ENOTFOUND merry-butterfly.rmq.cloudamqp.com/api merry-butterfly.rmq.cloudamqp.com/api:443

处理错误的适当方法是什么,并且对#34;检查列表中的每个条目进行异步测试"?

1 个答案:

答案 0 :(得分:0)

Ping主机。

https://www.npmjs.com/package/ping

例如:

var ping = require('ping');

var hosts = ['192.168.1.1', 'google.com', 'yahoo.com'];
hosts.forEach(function(host){
    ping.sys.probe(host, function(isAlive){
        var msg = isAlive ? 'host ' + host + ' is alive' : 'host ' + host + ' is dead';
        console.log(msg);
    });
});