LabVIEW完成网络ping功能
最近发现监控到处都用网络监控软件whatup gold软件来实现,而且基本用的是ping功能来完成局域网中设备连通性测试与告警。鉴于whatup gold是收费软件,笔者就像利用LabVIEW来完成这个功能。
LabVIEW中是没有ping函数的。函数来完成这个功能,众所周知ping和tracert命令是基于ICMP报文的,最开始笔者准备自己封装个发送ICMP包的,在使用Wireshark抓包后准备使用LabVIEW的tcp函数来发个ICMP报文,研究一番才发现icmp并不是tcp协议,它们可是同一级的,icmp是ip.proto等于1,tcp的ip.proto等于6。那LabVIEW自带模块是没有完成封装个发送ICMP包了。
于是乎想起以前使用wincap来抓捕数据帧的运用,想着利用wincap.dll来完成这个工作,但是感觉太过于很麻烦。世上无难事,只要肯放弃;只要跑得快,麻烦就找不到我;只要认怂速度够快,平安。。。。总之就是算了!
还是直接使用LabVIEW直接执行系统命令函数吧!
这里笔者用来四个命令,每个命令都有微小的区别。
1、ping -n 1 -w 1 192.168.31.1
ping一次,延时一秒防止网络不可达时等待时间过长。那么输出结果时可以使用返回码来判断,返回0表示命令成功,网络可达,返回码1表示网络不可达。笔者看到网络中直接解析标准输出的内容老判断网络联通性,是在不妥。
2、cmd /c ping -n 1 -w 1 192.168.31.1
cmd /c将调用命令行解释程序(cmd.exe)并调用在后续参数中指定的内置命令,这与上面的命令没啥区别,但是在下面的参数的命令中是十分有用的。
3、cmd /c ping -n 1 -w 1 192.168.31.1 >nul
此命令将标准输出的内容定向到空,那么就必须使用cmd /c ,不然会提示“错误的参数 >nul”
4、cmd /c ping -n 1 -w 1 192.168.31.1 >nul && (echo online) || (echo offline)
此命令是笔者第一次根据需求就测试的命令,放在最后是因为这样来判断网络连通性,其实不太可取,但是可以自定义输出或者根据连通性直接执行某种程序。网络可达时输出online,网络不可达时输出offline 。在cmd中测试时,记得不要在powershell中,不然会提示&&和 ||不是此版本中的有效语句分隔符 ,这个花了笔者一点时间才知道原因。