【问题标题】:How to "Ping" from a Node.js app?如何从 Node.js 应用程序“Ping”?
【发布时间】:2011-06-11 20:22:51
【问题描述】:

我想从我的 node.js 应用 ping 一个服务器。

这可行吗?

谢谢

【问题讨论】:

  • 制作 ICMP 消息通常需要 root 权限,因此如果您在 unix 上运行,您的脚本必须运行 suid root,我不确定您是否想要这样。或者您需要能够启动一个外部进程(即 ping),它是 suid root,不知道在 node.js 中是否可以,但我想应该可以?
  • 如果你经常这样做,Nikolaus 的方法可能会变慢,因为你正在分叉进程(相对昂贵)。

标签: node.js


【解决方案1】:

您可以使用exec 调用系统ping 命令

var sys = require('sys')
var exec = require('child_process').exec;
function puts(error, stdout, stderr) { sys.puts(stdout) }
exec("ping -c 3 localhost", puts);

【讨论】:

  • 你可以这样做。但是如果你做很多(同时)它会很昂贵,因为分叉过程很昂贵(相对)。
  • sys 现已弃用
【解决方案2】:

node-net-ping 是一个很棒的模块,它使用原始套接字。

而且,如果您只寻找原始套接字,同一个开发人员也有一个模块:node-raw-socket

【讨论】:

  • 知道如何使用 node-net-ping 而不是 IP 地址来 ping 一个 url?域未解析。
  • 这个好像不支持端口?
  • @OlivUtilo Ping 是 ICMP 协议的一部分,它没有端口的概念。
  • @Bach 你可以使用dns.resolve()自己解析域
【解决方案3】:

我是ping-wrapper的作者。

它会产生 ping,您可以立即收听事件。如果进程退出,它将自动生成。

【讨论】:

  • 这个怎么安装?
  • 使用 npm。运行npm install --save ping-wrapper
【解决方案4】:

执行 ping(可编程)需要 root 权限,因为它需要需要 root 访问权限的 raws 套接字。您可以在Gradwohl's sn-p 之后执行 ping,但请记住,您正在分叉一个新进程,这很昂贵(相对)。如果你不需要做很多(并发)这肯定会工作:)

要在 node.js(only) 中做到这一点而无需分叉过程,我认为你有几个选项,它们都很难实现:()

  1. 将此ping python library 重写为node.js,然后以root 用户身份运行程序。
  2. 使用asio c++ library 为node.js 编写c++ extension/addon for node.js。它也有几个例子如何做icmp ping

不(仅)使用 node.js:

  1. 使用python ping library以root身份运行并通过redis与node.js实例通信。 => 最容易实施。(几乎没有任何工作,但我认为相当快:))
  2. 再次使用 asio c++ 编写 c(++) 代码,而不是编写 node.js 扩展,通过 hiredis 与同样使用 redis 的 node.js 进行通信。

附带说明如何在 node.js 上使用 redis:

【讨论】:

    【解决方案5】:

    你也可以使用我的 nodejs ping 包装器yaping。有一天,我们将在 nodejs 中获得原始套接字,我们将能够制作自己的 ping 数据包并谎报我们的响应时间。 ;-)

    这个简单的函数应该

    • 进行 dns 查询
    • ping 一次
    • 10 秒后超时
    • 通过 ping 提供的错误代码传达所有信息
    • 非婚生子进程

    【讨论】:

      【解决方案6】:

      我知道这个答案很久以前就已经回答过了,但是对于正在寻找相同答案的人,我在 github 上写了一个模块来尝试更简化它:)

      https://github.com/bscarvell/pingwrap

      【讨论】:

      • 链接好像又断了!
      猜你喜欢
      • 2014-11-02
      • 2021-05-21
      • 1970-01-01
      • 2017-09-01
      • 2012-02-25
      • 1970-01-01
      • 2017-09-07
      • 2019-10-05
      • 2020-09-07
      相关资源
      最近更新 更多