Как проверить подключение к Интернету в консоли?

Вам нужно ядро ​​3.4.

На самом деле у меня есть ядро ​​3.3 в 10.04, которое работает без проблем, хотя я должен попробовать 3.4.

Для дополнительной справки: графический пакет Intel 12.07

1
задан 9 March 2018 в 10:48

9 ответов

Я использую этот метод ...

if [[ "$(ping -c 1 8.8.8.8 | grep '100% packet loss' )" != "" ]]; then echo "Internet isn't present" exit 1 else echo "Internet is present" wget www.site.com fi
6
ответ дан 25 May 2018 в 22:49
  • 1
    У меня разные результаты для ping -c 1 8.8.8.8 и ping -c 1 www.google.com. Как так? – MERose 3 March 2015 в 17:42

Проверка того, что сайт работает, обычно выполняется с помощью средства мониторинга, например nagios. Это будет постоянно следить за сайтом и уведомлять вас об отключении.

Когда вы проверяете, запущен ли интернет из командной строки, выполните несколько шагов:

Проверьте, что Интернет вверх ping google.com (проверяет DNS и известный доступный сайт). Проверьте, что веб-сайт использует wget или w3m для извлечения страницы.

Если Интернет не диагностируется наружу.

Проверьте, что Интернет работает ping google.com (проверяет DNS и известный доступный сайт). Проверить DNS-серверы pingable. (Проверьте /etc/resolv.conf для адресов.) Проверьте, что веб-сайт используется wget или w3m для извлечения страницы.

Если Интернет включен, но сайт вниз с w3m http://isup.me/example.com, заменив example.com на сайт, который появляется вниз. Используйте wget, lynx или какой-либо браузер командной строки, доступный вам, если у вас нет установленного браузера w3m.

5
ответ дан 25 May 2018 в 22:49
  • 1
    Спасибо за ваше предложение! Является ли мой сценарий основным требованием проверки и предупреждения меня, когда мой сайт не работает? И будет тихо, если есть проблема с подключением к Интернету – Ashfame 27 February 2011 в 20:35
  • 2
    Похоже, ваш скрипт будет делать то, что вы хотите. Вы можете включить команду wget в оператор if как if ! wget --spider http:///example.com; then. – BillThor 27 February 2011 в 20:58
  • 3
    вы имеете в виду, что wget всегда возвращает 1 для 200 HTTP-кода ответа? – Ashfame 28 February 2011 в 00:08
  • 4
    Я имею в виду, что тест [ $? != 0 ] совпадает с тестом ! command. wget задокументирован, чтобы вернуть 0 при успехе, а не 0 для отказа. Оператор if ведет себя одинаково, что когда-либо вы его кодируете. Если wget возвращает ошибку при ответе 200, тест будет терпеть неудачу в любом случае, если вы его напишете. То же самое, если он возвращает 0 для кода ответа, отличного от 200. – BillThor 28 February 2011 в 03:25
  • 5
    Благодаря! Это сделает скрипт более понятным и понятным. – Ashfame 28 February 2011 в 09:24

Я просто использовал

nm-online

, который приостанавливается до тех пор, пока сетевое подключение не появится сетевым менеджером. Хорошо работает. Вы можете делать и другие вещи с этим.

3
ответ дан 25 May 2018 в 22:49

Это сценарий оболочки, который я использую для проверки подключения к Интернету:

alarm.sh

#! /bin/bash

if curl --silent --head http://www.google.com/ |
    egrep "20[0-9] Found|30[0-9] Found" >/dev/null
then
    echo Internet status: OK
else
    echo Internet status: ERROR
    mpg321 alarm.mp3 &> /dev/null
fi
sleep 60
clear

./alarm.sh

Вам нужно будет установить curl и mpg321

sudo apt-get install curl mpg321

Вам понадобится звуковой файл .mp3, переименованный в alarm.mp3 в той же папке, если вы хотите слышимый звуковой сигнал. Наконец настройте URL-адрес веб-сайта и egrep для ваших нужд.

3
ответ дан 25 May 2018 в 22:49
  • 1
    Это прекрасно работает даже тогда, когда пользователь находится за скрытым порталом и не вошел в систему. – Ashhar Hasan 8 May 2017 в 16:02
  • 2
    Вы можете использовать egrep -q вместо egrep ... > /dev/null – wjandrea 28 November 2017 в 06:26
  • 3
    Почему сценарий вызывает себя вместо того, чтобы просто использовать цикл while? – wjandrea 28 November 2017 в 06:26
  • 4
    Ой, подождите, он не называет себя. Он вызывает скрипт под названием alarm.sh в wd, поэтому, если вы вызываете этот скрипт из другого каталога, он будет либо ошибкой, либо если в wd есть скрипт под названием alarm.sh, он будет вызывать это вместо этого. Так что это плохая практика. Вместо этого вы могли бы использовать "$0", но цикл while был бы лучше. – wjandrea 28 November 2017 в 06:28
  • 5
    «Почему сценарий вызывает себя вместо того, чтобы просто использовать цикл while? & Quot; : Потому что я был noobs, когда я сделал это сообщение, и да, сценарий называл себя. – 01BTC10 1 December 2017 в 21:19

Проверка работы интернета

sudo nm-tool | grep "State: connected" | wc -l

Из вывода (выдержка):

1 #System is connected to internet

Однако, как упоминалось другими, это не говорит о том, действительно ли у вас есть возможность подключения или нет. Например. Вы можете подключиться к маршрутизатору, и маршрутизатор не обязательно подключен к Интернету.

2
ответ дан 25 May 2018 в 22:49
  • 1
    nm-tool был удален в Ubuntu 15.04+, но вместо этого вы можете использовать nmcli. Например. [F3] – Six 27 January 2016 в 19:15
  • 2
    @Six nmcli -f STATE -t nm хорошая вещь не зависит от веб-сайтов! – Aquarius Power 31 January 2016 в 06:13
  • 3
    Обратите внимание, что nm-tool и nmcli сообщают вам только, подключены ли вы к локальной сети , т. Е. Подключены ли вы к домашнему wifi / ethernet или нет. Он не скажет вам, сможете ли вы достичь чего-либо за пределами вашей локальной сети, то есть Интернета. – Sergiy Kolodyazhnyy 28 November 2017 в 07:27

Мне нужна помощь по тому же вопросу, и я получил свой ответ следующим образом:

echo $(nm-online) $? connection problems
0
ответ дан 25 May 2018 в 22:49
  • 1
    как это работает? – wjandrea 28 November 2017 в 06:31
  • 2
    Он просто проверяет статус (один символ) команды nm-online ... Он вернет 0, если все в порядке. Обычный во всех UNIX оболочках. – Antonio 4 March 2018 в 03:16

Проверка работы Интернета не такая уж тривиальная. ping - ICMP, поэтому он может работать, даже если веб-прокси отключен. Что-то подобное происходит с DNS, если вы тестируете с помощью IP.

Поскольку мое подключение к Интернету нестабильно, я создал этот скрипт (на основе этого), который заставляет мягкий звук аккорда звонить мне, а также использует Ubuntu notify когда возвращается подключение к Интернету:

#!/bin/bash

hash play 2>&- || { echo >&2 "I require «play» but it's not installed. Try apt-get install sox. Aborting."; exit 1; }

WGET="`which wget`"
URL="http://www.google.com"
delay=3;
noConnectionMessage="No connection, trying again in $delay seconds...";
connectionMessage="WE HAVE INTERNET! :) Trying again in $delay seconds...";

echo "INTERNET TESTER: Type Ctrl+C to quit";
rm --force /tmp/index.site

function playSound {
    time=1;    # Time played
    if [ `sox --version| grep -oP "v[0-9.]+" | sed "s/[v.]//g"` -lt 1431 ]; then    #analize sox version, if greater than v14.3.1 can use pluck
        play -q -n synth $time sine;
    else
        play -q -n synth $time pluck $1;
        #for i in G4 G4 G4 E4;do play -n synth 0.1 pluck $i repeat 2;done    # You can play with something like this also :) (first three notes from Beethoven 5th symphony)
    fi
}

while [ 1 -eq 1 ]; do
    $WGET -q --tries=10 --timeout=2 $URL -O /tmp/index.site &> /dev/null
    if [ ! -s /tmp/index.site ];then
        echo $noConnectionMessage;
        #playSound E2
        sleep 1;
    else
        #~ zenity --warning --text "ADDRESS is back"
        notify-send -i "notification-network-wireless-full" "Connection state:" "$connectionMessage";
        echo $connectionMessage;
        playSound E3
    fi
    sleep $delay;
done

exit 0;
0
ответ дан 25 May 2018 в 22:49

Я искал сценарий, который будет постоянно проверять мое подключение к Интернету, которое будет запускаться всякий раз, когда мой сервер будет включен, и я сделал это:

Сначала установите fping
apt-get install fping
Создайте сценарий инициализации в в папке /etc/init.d со следующим содержимым (я назвал его testcon)
#!/bin/bash

PIDFILE=/var/run/testcon.pid

. /lib/lsb/init-functions

case "$1" in
  start)
        log_daemon_msg "Starting internet connection tester"
        /etc/init.d/testcond &
        echo $! > $PIDFILE
        log_end_msg $?
    ;;
  stop)
        log_daemon_msg "Stopping internet connection tester"
        PID=$(cat $PIDFILE)
        kill -9 "$PID"
        log_end_msg $?
    ;;
  *)
    echo "Usage: /etc/init.d/testcon {start|stop}"
    exit 1
    ;;
esac

exit 0
Создайте сценарий в папке /etc/init.d со следующим содержимым (я назвал его testcond)
#echo Computer starting or testing daemon init
while [ "$itest" == "" ] 
do
    #wait 5 seconds 
    sleep 5
    itest=$(fping 8.8.8.8 | grep alive)
done
date | mail -s "Server is up and Internet is online" your_email@gmail.com

#loop forever
while [ "1" == "1" ] 
do
    itest=$(fping 8.8.8.8 | grep alive)
    #if internet is down
    if [ "$itest" == "" ] 
    then
        #echo Internet is down
        #log time it was found down
        current_time=$(date)
        echo "Internet was found down @ $current_time" >> /mnt/data/Server/internet_log.txt
        #loop until it is back
        while [ "$itest" == "" ] 
        do
            #wait 60 seconds 
            sleep 60
            itest=$(fping 8.8.8.8 | grep alive) # test the internet
        done
        #when it is back
        current_time=$(date)
        echo "Internet is back        @ $current_time" >> /mnt/data/Server/internet_log.txt
        body=$(tail -2 /mnt/data/Server/internet_log.txt)
        echo "$body" | mail -s "Internet is back online" your_email@gmail.com
    fi
    #echo Internet is online
    #wait 60 seconds
    sleep 60
        done
Затем я запускаю команды ниже, чтобы добавить к запуску:
sudo update-rc.d testcon defaults
sudo update-rc.d testcon enable
Перезагрузка
0
ответ дан 25 May 2018 в 22:49

Я столкнулся с случайным отбросом Wi-Fi-соединений моим чипом Broadcom BCM94331CD. Я разработал следующий скрипт bash (бесконечный цикл), проверяющий каждую секунду, если соединение Wi-Fi Интернета запущено и работает. Другая предложенная здесь командная строка будет ждать не менее 5-10 секунд перед закрытием со статусом, то есть ping. В то же время я ищу окончательное решение.

Из результатов на askubuntu мне придется очистить пакет bcmwl-kernel-source, поскольку я использую firmware-b43-installer и b43-fwcutter. [!d1 ]

Спасибо всем за их предложения (см. выше).

Этот скрипт необходимо добавить в программы запуска и не использовать super user для запуска.

[F1]
0
ответ дан 25 May 2018 в 22:49

Другие вопросы по тегам:

Похожие вопросы: