在我的学校,互联网是不可用的(每天晚上23点以后,学校会切断互联网连接,让我们上床睡觉>..<),然后ping永远不会停止,尽管我使用了参数ping -w1 ...。
也就是说,当我使用:ping -q -w1 -c1 8.8.8.8检查互联网连接是否打开/关闭时,它将在那里,没有任何输出,也不退出,就像我使用单个cat一样。
我不知道为什么会这样,但我认为问题与学校的互联网服务有关。有什么建议吗?(我认为wget可能是一个很好的替代方案,但是我如何使用它呢?)
发布于 2013-06-25 16:35:06
使用wget:
#!/bin/bash
wget -q --tries=10 --timeout=20 --spider http://google.com
if [[ $? -eq 0 ]]; then
echo "Online"
else
echo "Offline"
fi发布于 2015-07-21 14:51:52
如果学校真的关闭了路由器,而不是将所有流量重定向到“你为什么不在床上”的页面,那么就不需要下载整个网页或发送HTTP报头。你所要做的就是建立一个连接并检查是否有人在监听。
nc -z 8.8.8.8 53这将输出“连接到8.8.8.8端口53 tcp/域成功!”如果有人在监听,则返回值0。
如果您想在shell脚本中使用它:
nc -z 8.8.8.8 53 >/dev/null 2>&1
online=$?
if [ $online -eq 0 ]; then
echo "Online"
else
echo "Offline"
fi发布于 2016-05-11 05:43:05
使用:
#!/bin/bash
INTERNET_STATUS="UNKNOWN"
TIMESTAMP=`date +%s`
while [ 1 ]
do
ping -c 1 -W 0.7 8.8.4.4 > /dev/null 2>&1
if [ $? -eq 0 ] ; then
if [ "$INTERNET_STATUS" != "UP" ]; then
echo "UP `date +%Y-%m-%dT%H:%M:%S%Z` $((`date +%s`-$TIMESTAMP))";
INTERNET_STATUS="UP"
fi
else
if [ "$INTERNET_STATUS" = "UP" ]; then
echo "DOWN `date +%Y-%m-%dT%H:%M:%S%Z` $((`date +%s`-$TIMESTAMP))";
INTERNET_STATUS="DOWN"
fi
fi
sleep 1
done;输出将产生类似如下的结果:
./internet_check.sh
UP 2016-05-10T23:23:06BST 4
DOWN 2016-05-10T23:23:25BST 19
UP 2016-05-10T23:23:32BST 7行尾的数字表示前一状态的持续时间,即19次上升,7秒下降。
https://stackoverflow.com/questions/17291233
复制相似问题