Как проверить доступ в интернет с помощью скрипта bash в linux?
в моей школе Интернет недоступен(каждую ночь после 23: 0 школа убьет интернет, чтобы положить нас в постель >..ping -w1 ....
то есть, когда я использую: ping -q -w1 -c1 8.8.8.8
чтобы проверить, если интернет вверх / вниз, он будет там без вывода и не выходит, так же, как я использую один cat
.
вы можете понять мой вопрос??? Я не знаю, почему это так, но я думаю, что проблема связана с школа-интернет-сервис. Есть предложения? (Я думаю wget
может быть хорошей альтернативой, но как использовать?)
8 ответов
использование wget:
#!/bin/bash
wget -q --tries=10 --timeout=20 --spider http://google.com
if [[ $? -eq 0 ]]; then
echo "Online"
else
echo "Offline"
fi
Если школа фактически отключает свой маршрутизатор вместо перенаправления всего трафика на страницу "почему ты не в постели", тогда нет необходимости загружать всю веб-страницу или отправлять HTTP-заголовки. Все, что вам нужно сделать, это просто установить связь и проверить, слушает ли кто-то.
nc -z 8.8.8.8 53
это выведет " соединение с портом 8.8.8.8 53 [tcp/domain] успешно!"и возвращают значение 0, если кто-то слушает.
Если вы хотите использовать его в оболочку сценарий:
nc -z 8.8.8.8 53 >/dev/null 2>&1
online=$?
if [ $online -eq 0 ]; then
echo "Online"
else
echo "Offline"
fi
установить fping: > меньше проблем, чем ping.
fping google.com | grep alive
использовать например так:
#!/bin/bash
itest=$(fping google.com | grep alive)
while [ "$itest" == "" ]
do
sleep 5
itest=$(fping google.com | grep alive)
done
echo now online
#!/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;
выход произведет smth как:
bash-3.2$ ./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://gist.github.com/cganterh/ffc2fffa8263857cbece
сохраните следующий код в тег .
#!/bin/bash
while true
do
wget -q --tries=10 --timeout=20 -O - http://google.com > /dev/null
if [[ $? -eq 0 ]]; then
echo $(date) "1" | tee -a log.csv
else
echo $(date) "0" | tee -a log.csv
fi
sleep 5
done
без wget
#!/bin/bash
echo -e "GET http://google.com HTTP/1.0\n\n" | nc google.com 80 > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "Online"
else
echo "Offline"
fi
наслаждаться ;)
надежная ping
в отдельном скрипте bash:
#!/bin/bash
ipaddr='8.8.8.8' # Google's public DNS server
[[ -z `ping -c1 $ipaddr |& grep -o 'Network is unreachable'` ]] || exit 1
[[ -z `ping -c3 $ipaddr |& grep -o '100% packet loss'` ]] && exit 0 || exit 1
поместите это в отдельный скрипт. Он справится разных ситуациях в сети как (1) не подключен к сети, (2) подключен к сети, но не может получить доступ к интернету (или, по крайней мере, Google), и (3) подключен к интернету.
вы можете позже использовать exit code
скрипта для проверки подключения, например
~$ script-name && echo online || echo offline