我想从node.js应用程序ping服务器。这可行吗?谢谢
des4xlb01#
您可以使用exec调用system ping命令
exec
var sys = require('sys') var exec = require('child_process').exec; function puts(error, stdout, stderr) { sys.puts(stdout) } exec("ping -c 3 localhost", puts);
mpgws1up2#
node-net-ping是一个使用原始套接字的令人敬畏的模块。而且,如果您只寻找原始套接字,同一个开发人员也有一个模块:是的。
dxpyg8gm3#
我是ping-wrapper的作者。它产生ping,您可以立即监听事件。如果进程退出,它将自动产生。
holgip5t4#
执行ping(可编程)需要root权限,因为它需要raws socket,而raws socket需要root权限。您可以按照Gradwohl的代码片段执行ping,但请记住,您正在派生一个新的进程,这是昂贵的(相对而言)。如果您不需要做很多(并发),这肯定会工作:)要在node.js(仅)中执行此操作而不使用forking进程,我认为您有两个选项,这两个选项都很难实现:()1.将此ping python library重写为node.js,然后以root用户身份运行程序。1.使用asio c++ library为node.js编写一个c扩展/addon。它也有几个如何执行icmp ping的示例。不(仅)使用node.js:1.使用python ping library作为root运行并通过redis与node.js示例通信。=〉最容易实现。(几乎没有任何工作,但我认为相当快:))1.再次使用asio c编写c(++)代码,但不是编写node.js扩展,而是通过hiredis与也使用redis的node.js通信。作为旁注,如何在node.js上使用redis:
dxxyhpgq5#
你也可以使用我的nodejs ping Package 器yaping。总有一天,我们会在nodej中得到原始套接字,我们将能够制作自己的ping包,并谎报我们的响应时间。- )这个简单的函数应该
gzszwxb46#
我知道这个答案在相当长的一段时间前就已经有了答案,但是对于正在寻找同样答案的人来说,我已经在github上写了一个模块,尝试更多地简化它:)https://github.com/bscarvell/pingwrap
dly7yett7#
它工作正常,
const { exec } = require("child_process"); exec("ping -c 10 google.com", (error, stdout, stderr) => { if (error) { console.log(`error: ${error.message}`); return; } if (stderr) { console.log(`stderr: ${stderr}`); return; } console.log(`stdout: ${stdout}`); });
vybvopom8#
有几种方法可以做到这一点。最简单的是使用ping命令。你可以通过使用child_process模块来做到这一点。
ping
child_process
const { spawnSync } = require('child_process'); const os = require('os'); // Windows: ping -n 1 HOSTNAME // Linux: ping -c 1 HOSTNAME function pingHostname(hostname) { const result = spawnSync('ping', os.platform() === 'win32' ? ['-n', '1', hostname] : ['-c', '1', hostname]); return result.stdout.toString().includes('Reply from'); }
或者,您可以使用net模块来ping服务器。
net
const net = require('net'); async function pingHostname(hostname) { return new Promise((resolve, reject) => { const socket = net.createConnection(80, hostname); socket.setTimeout(3000); socket.on('connect', () => { socket.end(); resolve(true); }); socket.on('timeout', () => { socket.destroy(); resolve(false); }); socket.on('error', () => { socket.destroy(); resolve(false); }); }); }
8条答案
按热度按时间des4xlb01#
您可以使用
exec
调用system ping命令mpgws1up2#
node-net-ping是一个使用原始套接字的令人敬畏的模块。
而且,如果您只寻找原始套接字,同一个开发人员也有一个模块:是的。
dxpyg8gm3#
我是ping-wrapper的作者。
它产生ping,您可以立即监听事件。如果进程退出,它将自动产生。
holgip5t4#
执行ping(可编程)需要root权限,因为它需要raws socket,而raws socket需要root权限。您可以按照Gradwohl的代码片段执行ping,但请记住,您正在派生一个新的进程,这是昂贵的(相对而言)。如果您不需要做很多(并发),这肯定会工作:)
要在node.js(仅)中执行此操作而不使用forking进程,我认为您有两个选项,这两个选项都很难实现:()
1.将此ping python library重写为node.js,然后以root用户身份运行程序。
1.使用asio c++ library为node.js编写一个c扩展/addon。它也有几个如何执行icmp ping的示例。
不(仅)使用node.js:
1.使用python ping library作为root运行并通过redis与node.js示例通信。=〉最容易实现。(几乎没有任何工作,但我认为相当快:))
1.再次使用asio c编写c(++)代码,但不是编写node.js扩展,而是通过hiredis与也使用redis的node.js通信。
作为旁注,如何在node.js上使用redis:
dxxyhpgq5#
你也可以使用我的nodejs ping Package 器yaping。总有一天,我们会在nodej中得到原始套接字,我们将能够制作自己的ping包,并谎报我们的响应时间。- )
这个简单的函数应该
gzszwxb46#
我知道这个答案在相当长的一段时间前就已经有了答案,但是对于正在寻找同样答案的人来说,我已经在github上写了一个模块,尝试更多地简化它:)
https://github.com/bscarvell/pingwrap
dly7yett7#
它工作正常,
vybvopom8#
有几种方法可以做到这一点。最简单的是使用
ping
命令。你可以通过使用child_process
模块来做到这一点。或者,您可以使用
net
模块来ping服务器。参考