如何监视互联网连接是否中断-对于Mac OS X


16

我已经订阅了一个新的ISP,但是我在使用这个新的ISP时遇到了问题。问题是互联网连接上出现了一些微中断,这是一种滞后,可能与他们的代理或我与网络的连接超时有关。

由于这些微中断是随机发生的,因此我无法证明,因为每次他们派遣技术人员到我的办公室时都无法检测到该问题,特别是因为该服务可能会稳定3、4个小时,然后再次开始显示该问题。

这很烦人,原因有两个。我正在下载内容,然后下载突然停止,因此我必须重新开始。另一个原因是,我使用了一个通过以太网连接到电话的VoIP盒,并且该VoIP盒每次都断开连接,并且VoIP电话停止接收/拨打电话,这迫使我每次检测到该盒时都要重新启动该盒并停留数小时。电话掉下来,没有注意到。

我的问题是:如何监视一段时间的互联网服务,告诉我该服务何时关闭,绘制图形或类似内容?有什么工具或某种方式可以监视Mac上可以运行的网络或连接质量?

我的想法是要有一些东西向他们展示并证明我是对的。


这个问题可能确实是一个主题,它适合“好问题”模板(来自“我怎么问可能需要推荐软件的问题?”“我有<问题-x-网络中断>,我不知道如何解决。我已经尝试过X,Y,Z(当我检测到它时重新启动VoIP),但是这些程序不能工作,因为那样或那样。我该怎么做?唯一的问题基本上是要求“监视互联网连接的工具”,而不是说“如何监视互联网连接是否中断吗?”
Xen2050 2016年

Answers:



7

如果使用以下命令:

ping -A -i 10 --apple-time 10.20.30.40 > monitor.txt

它将持续运行,直到停止并每10秒ping 10.20.30.40(更改您的地址)

--apple-time意味着它将记录每次ping的时间,以便您查看失败。像这样:

11:33:10.793801 64 bytes from 10.20.30.40: icmp_seq=0 ttl=58 time=27.744 ms
11:33:11.780250 64 bytes from 10.20.30.40: icmp_seq=1 ttl=58 time=9.757 ms
11:33:12.781136 64 bytes from 10.20.30.40: icmp_seq=2 ttl=58 time=10.150 ms
11:33:13.782932 64 bytes from 10.20.30.40: icmp_seq=3 ttl=58 time=11.779 ms
11:33:14.785446 64 bytes from 10.20.30.40: icmp_seq=4 ttl=58 time=11.254 ms

2

ping在终端中运行怎么样?只需找到一个开启并响应ping的服务器即可。虽然它没有显示确切的时间,但它为您提供了某种证明是错误的证据。

编辑添加:一段时间以前,我自己使用过类似的产品。尽管他们坚持认为我的(老龄化)无线接入点可能有问题,但由于他们什么也没发现,“我每小时至少有一次ping超时”帮助工程师进行了检查。


2

要监视Internet连接,只需使用ping命令即可。它只是发送ICMP ECHO_REQUEST并期望响应。

Ping您的路由器IP,如果它没有响应,您可以向ISP报告互联网中断。

如果您的路由器有防火墙,请arping改用它,或直接选择其他远程主机,例如

$ ping 4.2.2.1
PING 4.2.2.1 (4.2.2.1): 56 data bytes
64 bytes from 4.2.2.1: icmp_seq=0 ttl=57 time=37.710 ms
64 bytes from 4.2.2.1: icmp_seq=1 ttl=57 time=32.051 ms

Arping

要监视与路由器的物理连接,可以使用arping,例如

$ sudo arping 192.168.0.1

当您的WiFi持续掉线并且路由器不响应标准ICMP数据包时,此功能特别有用。通过Brew(brew install arping)安装。

Tcpdump

tcpdump哪些可以在网络上转储流量。例如,将所有传出数据包转储到port 80和中443,语法可以是:

sudo tcpdump -i en0 port http or port https

要写入文件,请添加-w file,然后通过读取-r file。这将包括正在接收或发送的每个网络数据包的确切时间戳。

要检查Internet是否中断,请查找计算机发送的SYN数据包(在“标志”部分),对于每一个,服务器应以SYN-ACK进行答复。如果这没有发生,并且没有任何流量返回(仅SYN数据包,则没有Internet连接)。


是否有一种简单的方法(如脚本)自动搜索tcpdump输出以查找没有相应SYN-ACK答复的SYN数据包?
Xen2050 '16

@ Xen2050我想我将通过查找如下S标记来grep转储或输出:sudo tcpdump -i en0 -nl | grep -C5 "Flags .S"从那里,如果您在上下文中确认(extra | grep ack),则表示已响应。因此,您需要相反的东西。我认为您会发现一些awk/ sed语法可以连续找到5个SYN数据包,然后它可以警告某些错误(除非您正在联系某些死主机)。
kenorb '16

对于实时监控,当连接断开时,ping -A www.yahoo.com将发出蜂鸣声。虽然可以使用IP地址,但使用人类可读的地址也可以测试DNS故障。
brianfit


1

那是吞吐量低的症状之一。原来是电缆调制解调器。好消息是您可能不必说服任何人购买新的电缆调制解调器。事实证明,我的ISP拥有一项政策,您可以随意将电缆调制解调器换成新的电缆调制解调器。检查并查看您的意愿。


有趣,但是您明白了。是的,很遗憾,我的连接是通过电缆调制解调器进行的,但这是一个全新的连接(一个月前由他们安装了)。我怀疑问题出在他们的有线网络上。我从来不喜欢有线互联网(我被迫使用它们,因为在我的地区没有其他宽带公司提供服务)。
SpaceDog 2010年

1

对于我自己的用法,我编写了一个简单的Bash脚本进行检查。ping就像大多数答案所建议的那样,它用作监视超时的方式。该脚本的优势在于,屏幕上的输出仅显示超时的ping,而不包括成功的ping。另外,您可以在监视期间传递参数,而不是ping尝试的次数。简而言之,它只是以下内容的包装器:ping google.com -i 1 -c 60 | grep "timeout\|statistics\|transmitted\|avg" 以下链接提供了其源代码和简单的安装说明:

https://github.com/superman-lopez/monitor-timeouts

我在macOS和Ubuntu Linux上测试了脚本。

#!/bin/bash
#Usage: ./monitor-timeouts.sh [duration] [target]
#example: ./monitor-timeouts.sh 60 192.168.1.1
minutes=$1
target=$2
if [ $# -eq 0 ]; then
    minutes=1
    target=google.com
fi
if [ -z "$2" ]; then
    target=google.com
fi
pings=$((60 * $minutes))

system=`uname`
if [[ $system == *"Linux"* ]]; then
    extraflag="-O"
fi

echo "Start monitor for network timeouts at `date` for $minutes minute(s)."
echo "Target host: $target"
ping $target -i 1 -c $pings $extraflag | grep -i "timeout\|unreachable\|no answer\|statistics\|transmitted\|avg"
echo "End monitoring at `date`."

欢迎来到超级用户!您的脚本足够简短,可以包含在您的帖子中;您应该编辑答案以包含答案
bertieb

感谢您的建议
Superman.Lopez,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.