如何解决NodeJS:测试 IP 是否可达的问题 上下文:问题代码解决方案注意
使用 NodeJS 检查 IP 是否可达
上下文:
我目前正在为我工作的公司开发 CLI 工具。如果某些 IP 可通过 ICMP Ping(仅限 IPv4)访问,则包括自动测试工具
对于此任务,我使用 NPM 包 ping
来测试每个 IP 异步。
问题
我的问题是,即使 IP 甚至不在同一个子网中,每个测试的结果都是正确的。 我做错了什么?...
代码
有一些方法可以从用户那里收集输入并进行验证:async function GetIpAddresses(): Promise<IpAddressList> {} // Get Input from User in various Menues
async function ValidateIPAddress(IpAddress: string): Promise<boolean> {} // Validate IPv4 Format
主要方法
function main(): void {
// Get IP Addresses from User
GetIpAddresses().then(async (result: IpAddressList) => {
// Validate IP Addresses inputed by User and perform a single Ping
result.AdressList.forEach(async (IpAddress) => {
// Validate
await ValidateIPAddress(IpAddress).then(async (isValid) => {
if (isValid) {
// IP Address is valid
WriteInfo(`IP-Address: ${IpAddress} is valid`);
await ping.promise.probe(IpAddress).then(async (isAlive) => {
if (isAlive) {
WriteSuccess(`IP-Address: ${IpAddress} is alive!`);
} else {
WriteError(`IP-Address: ${IpAddress} is dead!`);
}
});
} else {
// IP Address is invalid
WriteWarning(`IP-Address: ${IpAddress} is invalid!`);
}
});
});
});
我做错了什么? 我怀疑我对 promise/async 的处理可能有问题。但我不知道是什么。
请注意,我不是全职开发人员。我是系统管理员。不要期待没有奇迹。
感谢您的帮助。
解决方法
感谢您的支持。我自己找到了答案。
这种方法:
await ping.promise
.probe(IpAddress)
.then(async (isAlive) => {
if (isAlive) {
WriteSuccess(`IP-Address: ${IpAddress} is alive!`);
} else {
WriteError(`IP-Address: ${IpAddress} is dead!`);
}
})
.catch(() => {
WriteError(`IP-Address: ${IpAddress} is dead!`);
});
实际上返回一个比布尔值(真/假)更复杂的响应:
{
inputHost: '192.168.1.1',host: '192.168.1.1',alive: false,output: '\r\n' +
'Ping wird ausgef�hrt f�r 192.168.1.1 mit 32 Bytes Daten:\r\n' +
'Zeit�berschreitung der Anforderung.\r\n' +
'\r\n' +
'Ping-Statistik f�r 192.168.1.1:\r\n' +
' Pakete: Gesendet = 1,Empfangen = 0,Verloren = 1\r\n' +
' (100% Verlust),\r\n',time: 'unknown',times: [],min: 'unknown',max: 'unknown',avg: 'unknown',stddev: 'unknown',packetLoss: '100.000',numeric_host: '192.168.1.1'
}
解决方案
await ping.promise.probe(IpAddress)
.then(async (pingResult) => {
if (pingResult.alive) {
WriteSuccess(`IP-Address: ${IpAddress} is alive!`);
} else {
WriteError(`IP-Address: ${IpAddress} is dead!`);
}
})
.catch(() => {
WriteError(`IP-Address: ${IpAddress} is dead!`);
});
注意
这个项目完成后,我会给你们一个链接到我的 GL Repo。这不是任何专有代码,所以这不是问题。也许有人可以使用这个。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。