如何在原生NodeJS中实现ICMP ping功能,无需依赖NPM等外部工具?
NodeJS无外部依赖实现ICMP Ping需求说明
大家好,前几天我尝试在NodeJS中对一个IP执行ICMP ping操作。按照论坛惯例我并非空手提问,我翻到过包括本站在内的不少相关实现方案,但都不符合我的需求。
我的项目有一个硬性要求,就是不能使用NPM或Node-GYP,因此raw-sockets相关方案直接被排除了——除非可以不用Node本身以外的外部依赖就能在NodeJS中调用C++代码。
我也尝试并实现了调用系统命令的方案,下面是我已验证可在Linux和Windows平台运行的实现(我没在Mac设备上测试,但大概率也能正常运行):
'use strict'; import { execSync } from "child_process"; class Ping { #stdoutToMS (stdout) { let res; let a = stdout.split('='); for (let i = 0; i < a.length; i++) { res = a[i].split("ms"); } return ~~res[0].split('/')[0].trim(); } ping (host, timeout = 5000) { let mstout = timeout / 1000; let stdout; try { if (process.platform === "win32") { stdout = execSync("ping -n 1 -l 1 -w " + timeout + ' ' + host); } else { stdout = execSync("ping -c 1 -s 16 -W " + mstout + ' ' + host); } } catch (err) { return false; } return this.#stdoutToMS(stdout.toString()); } }; export default Ping;
如果大家有无需借助外部软件、纯原生NodeJS实现该功能的思路,还请不吝赐教,非常感谢。
内容的提问来源于stack exchange,提问作者Valentino Zaffrani
相关产品推荐
相关产品推荐

