Как то я проснулся ночью. Спать не хотелось и я решил пошариться по интернету. Да не тут то было. Во внутреннюю сеть Корбины вхожу - далее никуда.
Думаю деньги кончились - полез в личный кабинет, а зайти туда не могу. Соединение сбрасывается.
Потом по прошествии времени с ними очень трудно разбираться.
- Когда у Вас было отключение? Не помните? Ну вспомните - позвоните.
В общем я разозлился и написал вот такой скрипт.
#!/bin/bash # Контроль работы домашнего проводного интернет BeeLine (Corbina) # Скрипт последовательно проверяет доступность внутреннего роутера, # внутренней сети Корбины (Билайн) и сайта google. # В случае ошибки доступа в log файле делается соответствующая запись. # # Для автоматической отправки писем требуется MTA. Я использую exim # Настройка MTA exim http://wiki.debian.org/GmailAndExim4 # # Copyleft AxaRu http://axa-ru.blogspot.com/2011/02/fucking-beeline.html # Версия Изменения # ------------ --------------------------------------------------------------- #VERSION=0.1 # Первая версия. Проверка работы интернета #VERSION=0.11 # Добавлена возможность измерения скорости соединения #VERSION=0.12 # Добавлены опции командной строки #VERSION=0.13 # Добавил опцию спецификации log-файла #VERSION=0.131 # Убрал ключ -v Verbose. Информация по доступности узлов # в log не пишется и выводится только в консоль при включении # ключа -d debug #VERSION=0.14 # сделал отправку письма и sms о перебое в работе интернета # и письма в службу Корбина (Билайн) с требованием компенсации # за непредоставленную услугу VERSION=0.141 # добавил спецификацию почтового ящика, куда будут # отправляться письма LOG_FILE=/var/log/corbina.log # журнал работы программы RC_FAIL=0 # return code = FAIL RC_OK=1 # return code = OK000 ERROR_BARIER=4 # Количество ошибок подряд, после которого высылается # письмо в службу поддержки о предоставлении компенсации EMAILTO=ivanov@gmail.com # Адрес, куда направлять письма о компенсации за # отсутствие услуги интернета #------------------------------------------------------------------------------- # Текст письма в службу поддержки CLAIM11="В службу поддержки пользователей от пользователя услуги ""Домашний интернет"" Иванова И.И. Договор №1234 от 12 октября 2008 года Сообщаю вам, что с" Start_interrupt=0 # когда прекратилась услуга интернета CLAIM12=" по " Stop_interrupt=0 # когда интернета был восстановлен CLAIM13=" были перебои в предоставлении услуги интернет. Прошу предоставить мне компенсацию. С уважением Иванов И.И. " #------------------------------------------------------------------------------- # Usage() { echo "chki -[dehlmsvV]" echo "check internet connection" echo " d - debug mode, shows the internal variables" echo " e - logs only error state" echo " h - this help" echo " l [filename] - specify log file, default /var/log/corbina.log" echo " m [mailbox] - mail to, specify mail recipient. If mailbox is" echo " wrong mail will not be delivered" echo " s - download speed measurement" echo " V - version" echo "example:" echo "chki.sh -del corbina.log -m myaddress -s" } #------------------------------------------------------------------------------- # Version() { echo "chki - check internet connection v$VERSION" } #------------------------------------------------------------------------------- # запись текста в log-файл Log() { echo $(date +'%F %T') ! "$*" | tee -a $LOG_FILE } #------------------------------------------------------------------------------- # Проверяет доступность сайта и возвращает результат Chk_ip() { if ping -c 3 -q $* | grep '100% packet loss'> /dev/null then Val=$RC_FAIL else Val=$RC_OK fi $DEBUG && echo "Address=$*, Result=$Val" return $Val } #------------------------------------------------------------------------------- # Проверяет это восстановление после сбоя? # Если да, то пишем письмо с претензией. Check_interrupt() { local x=2 line_rec=$(tail -$x "$LOG_FILE" | head -1 | grep FAILED) if [ -n "$line_rec" ] then Stop_interrupt=${line_rec:0:19} while [ -n "$line_rec" ] do let x++ Start_interrupt=${line_rec:0:19} line_rec=$(tail -$x "$LOG_FILE" | head -1 | grep FAILED) done $DEBUG && echo "Start_interrupt = $Start_interrupt, Stop_interrupt = $Stop_interrupt" fi let "ERROR_BARIER += 2" $DEBUG && echo "Count=$x, Barrier=$ERROR_BARIER" if [ "$x" -gt "$ERROR_BARIER" ] then $DEBUG && echo "Длинный перерыв. Пишем претензию." $DEBUG && printf "%s %s %s %s %s" \ "$CLAIM11" "$Start_interrupt" "$CLAIM12" "$Stop_interrupt" "$CLAIM13" printf "%s %s %s %s %s" \ "$CLAIM11" "$Start_interrupt" "$CLAIM12" "$Stop_interrupt" "$CLAIM13" \ | mail -s 'Компенсация по непредоставлению услуги Домашний интернет' $EMAILTO fi } #------------------------------------------------------------------------------- # Скачивает тестовый файл длиной 10 MB TEST_FILE=http://speedtest.wdc01.softlayer.com/downloads/test10.zip # и расчитывает скорость закачки SPEED=0 Speed_tst() { Start=`eval date +%s` eval curl -o /dev/null $TEST_FILE Stop=`eval date +%s` Ttime=$(( $Stop - $Start )) Speed_Rate=$(( 10485760 / $Ttime / 1024 )) $DEBUG && echo "speed_tst: $Stop - $Start = $Ttime, Rate = $Speed_Rate k" SPEED=$Speed_Rate return } #------------------------------------------------------------------------------- # --- Configuration --- IP1=192.168.1.1 # Роутер IP2=home.corbina.net # Сеть Корбины/Билайна IP3=www.google.com # Всегда onLine # IP1 IP2 IP3 # ok ok ok - Все работает # ok ok fail - Соединение с сетью есть но выхода в интернет нет # ok fail fail - Отсутствует соединение с сетью # fail fail fail - Ошибка локальной сети # #------------------------------------------------------------------------------- # Считываем ключи командной строки и устанавливает # соответствующие значения переменным DEBUG=false CSPEED=false LOG_OK=true while getopts 'dehl:svV' OPTION do $DEBUG && printf "%s " $OPTION case $OPTION in d) DEBUG=true ;; e) LOG_OK=false ;; h) Usage exit 2 ;; l) LOG_FILE=$OPTARG ;; m) MAILTO=$OPTARG ;; s) CSPEED=true ;; V) Version exit 2 ;; *) Usage exit 2 ;; esac done $DEBUG && printf "d\n" && echo + Отладка + $DEBUG && echo "Log file = $LOG_FILE" Chk_ip "$IP1" NVal=$(( $? * 100 )) $DEBUG && echo "NVal=$NVal" Chk_ip "$IP2" NVal=$(( $NVal + $? * 10 )) $DEBUG && echo "NVal=$NVal" Chk_ip "$IP3" NVal=$(( $NVal + $? )) $DEBUG && echo "NVal=$NVal" case $NVal in 0) Log "*********** BIG FAIL: You home network is destroyed!!!" ;; 100) Log "************* FAILED: BeeLine is shitheads" ;; 110) Log "************* FAILED: BeeLine is shitheads" ;; 111) $DEBUG && echo "Internet OK" Check_interrupt SPEED='---' $CSPEED && Speed_tst $LOG_OK && Log "OK: Life is beautiful. Download speed = $SPEED" ;; *) Log "Fucking shit. You BAD programmer!!! NVal=$NVal" ;; esac exitЗапускается с различными опциями.
Теперь достаточно посмотреть corbina.log я подкован фактическим материалом 8)