![简单的互联网连接正常运行时间监视器](https://linux22.com/image/526323/%E7%AE%80%E5%8D%95%E7%9A%84%E4%BA%92%E8%81%94%E7%BD%91%E8%BF%9E%E6%8E%A5%E6%AD%A3%E5%B8%B8%E8%BF%90%E8%A1%8C%E6%97%B6%E9%97%B4%E7%9B%91%E8%A7%86%E5%99%A8.png)
我只需要监控互联网连接中断的频率以及持续时间。我本来打算写一段 Python 代码,每分钟 ping 8.8.8.8,但我认为一定有一个实用程序可以做到这一点 - 并生成一份不错的报告
但这是一个具有简单 SOHO 类型连接的分支机构,没有 SNMP 路由器,仅限 Windows,必须在非专用于此任务的台式机上运行。
不需要知道容量、ping 延迟或任何其他信息 - 只需要向有线电视公司报告宕机超过几秒钟的次数。
答案1
我反过来做平多姆。免费帐户,一次检查。Ping 路由器的 WAN IP 地址,一切正常。您会收到每月的正常运行时间报告,并且可以向有线电视公司大喊大叫。
答案2
我不知道任何实用程序,但我用 perl 为自己做了一个简单的代码:
#!/usr/bin/perl
use Net::Ping;
use POSIX qw/strftime/;
if (-e '/var/run/net_test.pid') {
print "net_test already running.\n";
exit;
} else {
system "touch /var/run/net_test.pid";
}
my $host = "www.google.com";
my $ping = Net::Ping->new('icmp');
my $result = $ping->ping($host,2);
if ($result != 1) {
$format = strftime('[%d/%m/%Y %H:%M:%S]',localtime)." Internet is not available...";
$run = `echo $format >> /var/log/virtua_net`;
while ($result != 1) {
$result = $ping->ping($host,2);
sleep 60;
}
$format = strftime('[%d/%m/%Y %H:%M:%S]',localtime)." Internet is back...";
$run = `echo $format >> /var/log/virtua_net`;
} else {
$format = strftime('[%d/%m/%Y %H:%M:%S]',localtime)." Internet is ok...";
$run = `echo $format >> /var/log/virtua_net`;
}
$ping->close();
system "rm -rf /var/run/net_test.pid" if (-e "/var/run/net_test.pid");
exit;
它的作用是,每次运行时都会尝试 ping 谷歌,然后它会将是否收到回复以及时间打印到一个文件中,以便您稍后可以检查从什么时间到什么时间互联网不可用。
如果您喜欢它,我可以做一些小改动以在 Windows 中使用,您确实需要安装 ActivePerl,仅此而已。
唯一需要改变的是路径和命令,它们在 Windows 上可能有所不同,仅此而已。
答案3
我目前正在调查一个类似的问题(分支机构的 DSL 故障)。我正在远程运行 PingPlotter;它是一个 Windows 程序,可以生成一个简单易读的图表。我使用该图表告诉 ISP 链接断开的时间。
(现在正在等待 ISP 真正修复它 - 如果您有任何关于如何让电信公司更快地工作的建议,请告诉我!)
答案4
Powershell 快速而又肮脏
while ($true) {
#if (test-connection -count 1 microsoft.com -Quiet) {
if (test-connection -count 1 google.com ) {
$result=(get-date).ToString("yyyy-MM-dd hh:mm:ss")
$result = "$result ok"
"$result" | Tee-Object -FilePath c:\~~temp\router_log.txt -append #"$result" | Out-File -FilePath c:\~~temp\router_log.txt -append
sleep 5
} else {
while (-not (test-connection -count 1 google.com -Quiet)) {
$result=(get-date).ToString("yyyy-MM-dd hh:mm:ss")
$result = "$result down"
"$result" | Tee-Object -FilePath c:\~~temp\router_log.txt -append
sleep -millisecond 100
}
}
}