суббота, 16 ноября 2019 г.

Качество "суверенного интернета"

  Вот он "суверенный интернет" раши

2019:11:15 03:11:25_786058398 error 2ip.ru
2019:11:15 03:11:35_166758811 error 2ip.ru
2019:11:15 03:12:38_348997548 error 2ip.ru
2019:11:15 03:12:53_369470903 error 2ip.ru
2019:11:15 03:24:44_151155676 error 1.1.1.1
2019:11:15 03:24:45_522460380 error 1.1.1.1
2019:11:15 03:24:47_839704652 error ip8.com
2019:11:15 03:24:48_846773475 error 2ip.ru
2019:11:15 03:24:50_087427187 error ip8.com
2019:11:15 04:10:13_671496586 error 1.1.1.1
2019:11:15 09:52:50_352252039 error 2ip.ru
2019:11:15 09:52:52_235025684 error 1.1.1.1
2019:11:15 09:52:53_238973342 error ip8.com
2019:11:15 09:52:54_245865113 error 2ip.ru
2019:11:15 09:52:56_256708035 error 1.1.1.1
2019:11:15 09:52:57_261817003 error ip8.com
2019:11:15 09:52:58_265451964 error 2ip.ru
2019:11:15 09:53:00_586008673 error 2ip.ru
2019:11:15 09:53:02_597014574 error 1.1.1.1
2019:11:15 09:53:03_603961041 error ip8.com
2019:11:15 09:53:04_611012036 error 2ip.ru
2019:11:15 09:53:06_622104481 error 1.1.1.1
2019:11:15 09:53:07_629384984 error ip8.com

2019:11:16 01:20:05_981319973 error 2ip.ru
2019:11:16 01:20:07_988708280 error 1.1.1.1
2019:11:16 05:05:39_935779731 error 1.1.1.1
2019:11:16 05:05:40_942661907 error ip8.com
2019:11:16 05:05:41_949947955 error 2ip.ru
2019:11:16 05:05:43_960708511 error 1.1.1.1
2019:11:16 05:05:46_603967033 error 1.1.1.1
2019:11:16 05:05:51_171136072 error ip8.com
2019:11:16 05:05:52_178337358 error 2ip.ru
2019:11:16 05:05:56_181070721 error 1.1.1.1
2019:11:16 05:05:57_185184957 error ip8.com
2019:11:16 05:05:58_188764141 error 2ip.ru
2019:11:16 05:06:00_721944153 error ip8.com
2019:11:16 05:06:01_727179838 error 2ip.ru
2019:11:16 05:06:06_665534115 error 2ip.ru
2019:11:16 05:06:09_247901598 error 1.1.1.1
2019:11:16 05:06:14_267554649 error ip8.com
2019:11:16 05:06:17_000582772 error 2ip.ru
2019:11:16 05:06:20_795034433 error 1.1.1.1
2019:11:16 05:06:21_802024487 error ip8.com
2019:11:16 05:06:22_809286609 error 2ip.ru
2019:11:16 05:06:24_820143802 error 1.1.1.1
2019:11:16 05:06:25_827177017 error ip8.com
2019:11:16 05:06:26_832711882 error 2ip.ru
2019:11:16 05:06:28_445569915 error ip8.com
2019:11:16 05:06:29_452474781 error 2ip.ru
2019:11:16 05:06:31_463532075 error 1.1.1.1
2019:11:16 05:06:32_469828429 error ip8.com
2019:11:16 05:06:35_485148981 error 1.1.1.1
2019:11:16 05:06:37_366343790 error ip8.com
2019:11:16 05:06:38_373494297 error 2ip.ru
2019:11:16 05:06:44_798148616 error ip8.com
2019:11:16 05:06:45_805127540 error 2ip.ru
2019:11:16 05:06:47_814314618 error 1.1.1.1
2019:11:16 05:06:48_817924087 error ip8.com
2019:11:16 05:06:49_825050463 error 2ip.ru
2019:11:16 05:06:51_835321146 error 1.1.1.1
2019:11:16 05:06:52_842289989 error ip8.com
2019:11:16 05:06:55_858092998 error 1.1.1.1
2019:11:16 05:06:58_245027739 error ip8.com
2019:11:16 05:06:59_248434746 error 2ip.ru
2019:11:16 05:07:04_718431601 error 1.1.1.1
2019:11:16 05:07:07_469851486 error ip8.com
2019:11:16 05:07:08_477081110 error 2ip.ru
2019:11:16 05:07:12_096291449 error 1.1.1.1
2019:11:16 05:07:13_103298147 error ip8.com
2019:11:16 05:43:37_104477072 error 1.1.1.1
2019:11:16 06:53:55_156942105 error 1.1.1.1
2019:11:16 07:34:22_004039367 error 1.1.1.1
2019:11:16 07:44:43_355542584 error ip8.com
2019:11:16 09:04:04_146438162 error ip8.com
2019:11:16 09:04:10_683549216 error 1.1.1.1
2019:11:16 09:04:24_533393215 error 2ip.ru
2019:11:16 09:04:36_079244000 error 2ip.ru
2019:11:16 09:04:40_866617356 error 2ip.ru
2019:11:16 09:04:42_705506488 error ip8.com
2019:11:16 09:04:47_044103516 error 1.1.1.1
2019:11:16 09:04:52_123698988 error 2ip.ru

пятница, 15 ноября 2019 г.

Как в сказке. Чем дальше - тем страшнее

  В свои тридцать лет, 29 из которых живу в этой "удивительной" стране, ни когда не интересовался политикой. А напрасно - так как политика интересуется КАЖДЫМ. Уж поверьте. Да, улышав в те редкие мгновения, когда включён путивизор, как его сейчас модно называть, разговоры о новых законах, вопринимал их как ни чего незачащую формальность. "Меня это не касается". И в сети регулярно натыкался на фразы "Да кому ты нужен?!" или "Не обязательность исполнения Российских законов...". Если к первому вырожению у меня практически сразу выработался иммунитет, то вот понимание истенного значения второй фразы я уяснил гораздо позднее.

  Первый вопрос который я себе задал, был: "почему меня убеждают так старательно, что я ни кому не интересен?". Ответ оказался прост:
  • Чтобы каждый отдельно взятый человек, привык к мысли, что он ни кто.
  • Если первый пункт выполнен, то спокойно можно убедить того человека, что данные (например, персональные) ни имеют ни какой ценности как для него самого, так и для окружающих.
  Приучив людей к этой мисли, можно одевать цифровой ошейник. В чем заключается этот "ошейник"? "Удобно", "быстро", "ни каких очередей". Да, удобно платить банковской картой. Однако есть ряд рисков, которые регулярно пополняются. Первая тут естественно социальная инженерия. Бонусом идут не добросовестные сотрудники банков, которые торгуют личными данными клиентов. При чем банк ответсвтвенности уже и не несет перед клиентом (достаточно улуги Сбера "страхование счета" или как оно там называется). Площадка подготовлена была заранее - огромную часть населения заставили получать зарплату в банках. Казалось бы удобно - не выходя из дома оплачиваешь счета, связь...

   Удобство не только для жителей, но в болшей степени для государства. Точнее это и было сделано именно для государства - чтобы каждый поделился копейкой с госчиновниками.  Собрав огромное количество информации о доходах, расходах каждого, кто пользуется, пользовался банками, государство сделало очевидный вывод: население имеет слишком много денег. А так как большинство пользователей "удобной" банковской системы теперь полюбило отсутствие наличносе в кармане, то теперь штрафы и прочее списывается автоматически. Может даже остаться всего лишь 0 рублей на счёте. А потом доказывай что ты не верблюд. Про себя скажу лишь, что решил не пользоваться банками (если быть точным, не давать банкам, пользоваться мной).

  "Не обязательность законов"... это имело место быть раньше, в 2000х... Но как мы понимаем, законы имеют цель не защищать, улучшать наш быт. А для получения прибыли совершенно конкретными личностями, которые продвигают те или иные идеи. так вот накопив не малое количество запрещающих законов их постепенно стали "включать". Когда я обеспокоился например законом "об оскорблении власти", мне некоторые знакомые говорили: "а ты не оскорбляй!". Я и не планировал. Вот только у нас чиновники такие обидчивые... Что порой страшно представить, какие извращенные фантазии у них могут быть на простую фразу. К тому же, у них и так столько денег и власти, что каждый новый закон направленный на их защиту делает налогоплатильщиков с каждым разом ниже в пищевой цепи, а это не прилично.

  Интернет. Искренне надеялся (как оказалось напрасно), что не совсем дебилы  принимают законы... Думал, ну заблокируют популярные сервисы анонимизации (впн, прокси), ну может быть порты какие прикроют. Как же меня обломали эти поскуды... С 10 ноября 2019 года у всех провайдеров пошли перебои со связью. Если раньше связь и равалась, то только ночью (вероятнее всего) для смены внешнего ip. У Билайна всегда эта болячка была (мобильного) очень часто менялся внешний ip и потому Гугл и яндекс задалбывали запросом капчи. Лжнако теперь, ни какого стабильного соединения. Что-то скопировать, скачать (без докачки. ей богу вернулись на 20 лет назад.) стало просто не возможно! А ssh сессии... это же тот еще ад переподключаться к удаленной машине по 1000 раз!!!

  Навальный, протесты. Навального лично не знаю. Мое мнение тут двоякое.
  1. Навальный сотрудник Кремля. Так как жив до сих пор. Кого надо уберут и быстро... тут пожалуй только лезть к власти, подставляя всех подряд, оставаясь в тени, тогда быть может доживешь. Это лишь одна из версий на этот счет.
  2. Может он и самостоятельный и везучий. Однако и тут есть вопросы... протестами не добьешься (в этой стране без вариантов) ни замены всей шоблы жулья засевшего в теплых кабинетах, ни смены главаря (не факто что это имено пыня. Есть вероятность, что это лишь лицо, а правят совсем другие люди. иначе как объяснить то, что все бывшие республики принимают законы под копирку.) этой банды.

  По мне так изменения в стране будут только при силовом варианте. И это должен быть не менее  жесткий руководитель, чем Сталин или Гитлер. Сопли жевать тут не поможет. Конечно быдут жертвы. Но уж лучше пусть легкая война, чем такой могильный покой. Мое мнение, что чем дальше людей загоняют, тем более жесткий ответ будет. Шанс маленький, но есть. 

  Трусливая нация, русский... достаточно посмотреть акции протестов Россия и Франция. Разница просто огромная. Даже наши соседи, Украинцы и те не такие соплежуи. Россияне ходили, топтали асфальт лето, осень по Москве и другим городам... Но кроме такой "действенной" фразы как "Позор!!!" аргументов не нашлось. Я не утверждаю, что надо было с первой же акции мочить полицаев... но вот "своих" отдавать... это уже просто нет слов. И у меня и думаю у мнох возникал резонный вопрос: "какого черта вы приперлись на площади??? чтобы вас толпами в автобудках вывозили и штрафы выписали?". Могли бы тогда просто раздать деньги на площадях первым встречным. Всяко больше пользы, чем дарить их в виде штрафов. Единство и только единство может и поможет что-то изменить. Когда эта мысль у всей тех, кто желает навести порядок, вростет как азы речи, тогда будет смысл все действий. А пока это только игра (хотя больше походит на цирк) по правилам жуликов (при чем жулики сейчас есть по обе стороны баррикад).

  Мне, к примеру, терять не чего. Разве что только жизнь. Но и тут вопрос цены... она ни чего не стоит. Все проходит, все мы умрем если не сегодня, то лет через 60-70-80. Важность нашей жизни исчисляется не тем сколько мы прожили, а как и для чего. Все великие люди подняли свой зад и что-то сделали. А те, кто отлеживал бока в истоии не значатся - их попросту нет. Главное об этом всегда помнить.

четверг, 14 ноября 2019 г.

В раше интернет работает с перебоями с 10 ноября

  Санкт-Петербург. С 10 ноября 2019 года на следующих провайдерах есть проблемы:
  • Ростелеком (еще летом связь отваливалась)
  • ДомРу (бывший Интерзет)
  • Yota
  • Tele2
  • Beeline
  • MTS
  Это только те провайдеры, с которыми имел дело лично!
При этом не только не работает сеть внешняя (ip8.com и 1.1.1.1), но внутри страны сеть так же не работает (2ip.ru). В общем принятые антинародные законы раюотают по полной, а граждане и бизнес страдают от отсутвия нормальной работы сети интернет. Полагаю, есть "белый" список компаний (Спер банк, например) приблатненых, которым не ведомы наши проблемы с сетью... Ожидаю, что с концом 2019 года лишимся все мы, жители раши доступа к сети Интернет... Информация и без того последние годы сложно добывалась обычними людьми, так теперь и вовсе к ней не позволят подойти. Я надеялся, что заблокируют порты и\или определенные зоны ip... но не тут то было...
  Эти дятлы в правительстве решили, что пора людей выгуливать по улицам городов. А Вы как думали? Что люди будут делать? Когда не будет Ютуба, Инстаграмма, или к чему так все привыкли за столько лет доступности сети...  Возможно, этот пост последний.

    Yota:

2019:11:14 19:50:19_062648795 error 1.1.1.1
2019:11:14 19:50:34_602664326 error ip8.com
2019:11:14 19:50:54_616126067 error 2ip.ru
2019:11:14 19:51:05_229698048 error ip8.com
2019:11:14 19:51:21_126100827 error ip8.com
2019:11:14 19:51:22_505804939 error 2ip.ru
2019:11:14 19:51:24_066321262 error ip8.com
2019:11:14 19:51:25_071733076 error 2ip.ru
2019:11:14 19:51:27_170663015 error ip8.com
2019:11:14 19:51:29_964510669 error 1.1.1.1
2019:11:14 19:51:30_971513380 error ip8.com
2019:11:14 19:51:31_979679879 error 2ip.ru
2019:11:14 19:51:35_625763759 error 2ip.ru
2019:11:14 19:51:39_096208837 error 2ip.ru
2019:11:14 19:51:40_265338310 error ip8.com
2019:11:14 19:51:41_904985776 error ip8.com
2019:11:14 19:51:43_465663856 error 1.1.1.1
2019:11:14 19:51:46_237217232 error 2ip.ru
2019:11:14 19:51:48_247228942 error 1.1.1.1
2019:11:14 19:52:04_510071072 error ip8.com
2019:11:14 19:52:31_402804641 error 1.1.1.1
2019:11:14 19:52:49_244032855 error ip8.com
2019:11:14 19:53:20_560857335 error 1.1.1.1
2019:11:14 19:53:30_578029695 error ip8.com
2019:11:14 19:53:40_591244419 error 2ip.ru

понедельник, 4 ноября 2019 г.

Kodi crash log home directory

  Надоела куча лог файлов Коди в домашней директории.

sudo nano /usr/bin/kodi

------------------------------
CRASHLOG_DIR=${CRASHLOG_DIR:-$HOME}
 исправить:
CRASHLOG_DIR=${CRASHLOG_DIR:-/dev/null}

суббота, 26 октября 2019 г.

цикличная запись потока по 10 секунд

#!/bin/bash
export DISPLAY=:0
export LANG=ru_RU.UTF-8
export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus"

i='129439' #параметр обозначающий порог свободного места на диске в МБ
FREE=$(df -m | grep "/1TB" | awk '{print $4}')
while [ "$i" -le "$FREE" ] #запись пока есть свободное место на диске
do
  echo "Запись нового файла: " $(date +%Y-%m-%d_%H-%M-%S)".mkv"
  if ! [ `ps -ef| grep -E "ffmpeg" | wc -l ` -gt 1 ]
   then ffmpeg -i http://192.168.0.4:8000/stream.mjpg -to 0:10 \
    -vf "drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf: text='%{localtime\:%X}': fontcolor=black@0.8: x=640: y=10" "/1TB/.zm/move/$(date +%Y-%m-%d_%H-%M-%S).mkv" 2>/dev/null
  fi
  FREE=$(df -m | grep "/1TB" | awk '{print $4}') #проверим сколько осталось свободного места после записи файла
  if [ "$i" -gt "$FREE" ];
  then
#ищем самый старый файл, за последние пять дней
#    var_d=$(find /1TB/.zm/move/ -type f -name '*.mkv' -mtime -5  | head -n 1)
    find /1TB/.zm/move/ -type f -name '*.mkv' -printf '%T+ %p\n' | sort | head -n1 | awk '{print $2}' > /tmp/rmM
    for r in $(cat /tmp/rmM); do echo " rm move $r"; rm $r; done
    FREE=$(df -m | grep "/1TB" | awk '{print $4}') #проверим сколько осталось свободного места
  fi
done

пятница, 25 октября 2019 г.

RHVoice только если есть кому слушать и не мешает смотреть кино

 Выполнять озвучивание погоды вечерами только при условии
  1. не запущен проигрыватель Коди
  2. прошло менее 31 минуты поле последнего обнаружения движения датчиком


nano /sh/rec-stream.sh
#!/bin/bash
echo "`date +%H\ %M\ %S\ %N` bash start" >> /var/www/html/mrtg/pir.txt
#if ping -c 1 172.28.253.4 2>&1> /dev/null
# then ssh lv@172.28.253.4 '/sh/rec-stream.sh' &
#     echo "`date +%H\ %M\ %S\ %N` lv rec stream start [OK]"
#fi

#if ping -c 1 192.168.0.11 2>&1> /dev/null
# then ssh evg@192.168.0.11 '/sh/rec_stream.sh' &
#      echo "`date +%H\ %M\ %S\ %N` asus rec stream start [OK]" >> /var/www/html/mrtg/pir.txt
#fi

#if ls /tmp/ | grep -oE "*.mp4" &>/dev/null
# then rm /tmp/*.mp4
#fi
#echo "`date +%H\ %M\ %S\ %N` rm .mp4 [OK]"

DATA=$(date +%Y-%m-%d_%H-%M-%S_%N)
echo "`date +%H\ %M\ %S\ %N` ffmpeg rec [OK]" >> /var/www/html/mrtg/pir.txt

#ffmpeg -i http://127.0.0.1:8000/stream.mjpg -to 0:02 -c:v copy -c:a copy /tmp/$DATA.mp4 2> /dev/null
#echo "`date +%H\ %M\ %S\ %N` ffmpeg stop [OK]"

#if ls /var/www/html/mrtg/ | grep -oE "cam1.jpg" &>/dev/null
# then rm /var/www/html/mrtg/cam1.jpg
#fi
#echo "`date +%H\ %M\ %S\ %N` bash rm jpg [OK]"

ffmpeg -f MJPEG -y -i http://127.0.0.1:8000/stream.mjpg \
 -r 1 -vframes 1 -q:v 1 /var/www/html/mrtg/cam1.jpg 2> /dev/null
echo "`date +%H\ %M\ %S\ %N` frames [OK]" >> /var/www/html/mrtg/pir.txt

convert /var/www/html/mrtg/cam1.jpg -background none -fill black -box 'white' -gravity South \
 -pointsize 20 -annotate +0+1050 $DATA /var/www/html/mrtg/cam.jpg
echo "`date +%H\ %M\ %S\ %N` image convert [OK]" >> /var/www/html/mrtg/pir.txt

if ping -c 1 192.168.0.11 2>&1> /dev/null
 then scp /var/www/html/mrtg/cam.jpg evg@192.168.0.11:/1TB/.zm/v/$DATA.jpg 2>&1 > /dev/null &
      echo "`date +%H\ %M\ %S\ %N` scp 11 jpg [OK]" >> /var/www/html/mrtg/pir.txt
      date +%s > /tmp/time0
      scp /tmp/time0 evg@192.168.0.11:/tmp/time0
fi
#if ping -c 1 172.28.253.4 2>&1> /dev/null
# then scp /var/www/html/mrtg/cam.jpg lv@172.28.253.4:/a/$DATA.jpg 2>&1 > /dev/null &
#      echo "`date +%H\ %M\ %S\ %N` scp  4 jpg [OK]" >> /var/www/html/mrtg/pir.txt
#fi


nano /sh/mint_pir.sh
#!/bin/bash
TIME0=$(cat /tmp/time0)
TIME1=$(date +"%s")
TIME2=$(echo "$TIME1-$TIME0" |bc)
TIME3='1860'
#TIME3='60'
#-eq - равно
#-lt - меньше
#-le - меньше или равно
#-ge - больше или равно
#-gt - больше
#-ne - не равно или нет
#
echo "$TIME2"
if [ $TIME2 -le $TIME3 ] &>/dev/null
 then /sh/RHvoice_time.sh
# echo " прошло менее 31 мин"
fi


crontab -e

*/15 19-22 * * 1-5 if ! ps aux|grep -v color |grep -o "/kodi/kodi.bin" &> /dev/null; then /sh/mint_pir.sh; fi

среда, 23 октября 2019 г.

RHVoice

nano /sh/RHvoice_pogoda.sh

#!/bin/bash
# Санкт-Петербург

URLW1='https://neva.today/pogoda/'

wget -q -O- "$URLW1" > /tmp/pogoda_w

TEMP=$(cat /tmp/pogoda_w | grep "Сейчас" | grep -oE "[+-]*.[0-9]")
WETE=$(cat /tmp/pogoda_w | grep "acronym" | grep -oE "title*.*" | tail -n 1 | grep -oE "[а-яА-Я].*.[0-9]*." | sed 's/">/\ /g' | sed 's/<\/acronym>/ /g' | sed 's/<\/div>/ /g' | awk '{print $2,$3,$4,$5,$6,$7,$8,$9}')

echo "$TEMP" > /tmp/pogoda_temp1
echo "$WETE" > /tmp/pogoda_temp2
echo "Температура $TEMP, ветер $WETE"


воскресенье, 20 октября 2019 г.

service_motion.sh

nano service_motion.sh:
-----------------------------------------------------------------
#!/bin/bash
while true; do

#P=$(ps aux | grep -v color | grep -E "service-pir.sh" | grep -E "T" | awk '{print $2}' | head -n 1)
#kill -9 $P

if [ `ps -ef| grep -E "*rec_pir.py" | wc -l ` -gt 1 ]
    then
      echo " is running"
    else truncate -s 0 /tmp/p1s
         ps aux |grep -v color|grep -v grep | grep "/py/rec_pir.py" | awk '{print $2}' > /tmp/p1s
         for i in $(cat /tmp/p1s); do echo " kill $i"; kill -9 $i; done
         ps aux|grep -v color|grep -v grep|grep "/py/rec_pir.py"
         /usr/bin/python3 /py/rec_pir.py &
         echo " restart"
#     if [ `ps -ef| grep -E "*camera.py" | wc -l ` -gt 1 ]
#     then
#      echo " is running camera.py "
#      PS1=$(ps aux | grep -E "*camera.py" | grep -v color | grep -v bash | grep -v grep | awk '{print $2}')
#      echo " $PS1"
#      kill -9 $PS1
#      sleep 1
#      /usr/bin/python3 /py/rec_pir.py &
#      echo " restart"
# fi
fi

sleep 10
done

--------------------------------------------------------------------------

nano ps_kill_motion.sh:
truncate -s 0 /tmp/p1s
ps aux |grep -v color|grep -v grep | grep "/py/rec_pir.py" | awk '{print $2}' > /tmp/p1s
for i in $(cat /tmp/p1s); do echo " kill $i"; kill -9 $i; done
ps aux|grep -v color|grep -v grep|grep "/py/rec_pir.py"
--------------------------------------------------------------------------

stream_mjpg.py

  Преобразовать html для блога:
http://www.elliotswan.com/postable/
  bash:
#!/bin/bash
echo " Преобразовать html код"
echo " например для blogger.com"
echo "  * * * нажать Enter чтобы продолжить * * *"
echo " Вставить html код..."
read T
truncate -s 0 /tmp/0.html
nano /tmp/0.html
sed 's/&/\&amp;/g; s/</\&lt;/g; s/>/\&gt;/g; s/"/\&quot;/g; s/'"'"'/\&#39;/g' /tmp/0.html > /tmp/1.html
cat /tmp/1.html


nano stream_mjpg.py
-----------------------------------------------
import picamera
import io
import logging
import socketserver
import datetime as dt
from threading import Condition
from http import server

PAGE="""\
<html>
<head>
<title>Raspberry Pi - My Camera</title>
</head>
<body>
<center><h1>Raspberry Pi - My Camera</h1></center>
<center><img src="stream.mjpg" width="960" height="580"></center>
</body>
</html>
"""

class StreamingOutput(object):
    def __init__(self):
        self.frame = None
        self.buffer = io.BytesIO()
        self.condition = Condition()

    def write(self, buf):
        if buf.startswith(b'\xff\xd8'):
            self.buffer.truncate()
            with self.condition:
                self.frame = self.buffer.getvalue()
                self.condition.notify_all()
            self.buffer.seek(0)
        return self.buffer.write(buf)
class StreamingHandler(server.BaseHTTPRequestHandler):
    def do_GET(self):
        if self.path == '/':
            self.send_response(301)
            self.send_header('Location', '/index.html')
            self.end_headers()
        elif self.path == '/index.html':
            content = PAGE.encode('utf-8')
            self.send_response(200)
            self.send_header('Content-Type', 'text/html')
            self.send_header('Content-Length', len(content))
            self.end_headers()
            self.wfile.write(content)
        elif self.path == '/stream.mjpg':
            self.send_response(200)
            self.send_header('Age', 0)
            self.send_header('Cache-Control', 'no-cache, private')
            self.send_header('Pragma', 'no-cache')
            self.send_header('Content-Type', 'multipart/x-mixed-replace; boundary=FRAME')
            self.end_headers()
            try:
                while True:
                    with output.condition:
                        output.condition.wait()
                        frame = output.frame
                    self.wfile.write(b'--FRAME\r\n')
                    self.send_header('Content-Type', 'image/jpeg')
                    self.send_header('Content-Length', len(frame))
                    self.end_headers()
                    self.wfile.write(frame)
                    self.wfile.write(b'\r\n')
            except Exception as e:
                logging.warning(
                    'Removed streaming client %s: %s',
                    self.client_address, str(e))
        else:
            self.send_error(404)
            self.end_headers()

class StreamingServer(socketserver.ThreadingMixIn, server.HTTPServer):
    allow_reuse_address = True
    daemon_threads = True


with picamera.PiCamera() as camera:
    output = StreamingOutput()
    camera.rotation = 180
    camera.color_effects = (128,128)
    camera.contrast = 60
    camera.brightness = 80
    camera.iso = 600
    camera.resolution = (1920, 1080)
    camera.framerate = 29
    camera.start_recording(output, format='mjpeg')

    try:
        address = ('', 8000)
        server = StreamingServer(address, StreamingHandler)
        server.serve_forever()
    finally:
        camera.stop_recording()

rec_pir_sensor.py

import RPi.GPIO as GPIO
import time
import subprocess

GPIO.setmode(GPIO.BCM)

#PIR
GPIO.setup(17, GPIO.IN)
try:
    time.sleep(2) # to stabilize sensor
    while True:
        if GPIO.input(17):
         print("Motion Detected...")
         rc = subprocess.call("/sh/rec-stream.sh")
##         time.sleep(5)
         print(" ...")
#        time.sleep(0.1)
        time.sleep(0.5)
except:
    GPIO.cleanup()

rec stream mjpg

#!/bin/bash
echo "`date +%H\ %M\ %S\ %N` bash start"
#if ping -c 1 172.28.253.4 2>&1> /dev/null
# then ssh lv@172.28.253.4 '/sh/rec-stream.sh' &
#     echo "`date +%H\ %M\ %S\ %N` lv rec stream start [OK]"
#fi

if ping -c 1 192.168.0.11 2>&1> /dev/null
 then ssh evg@192.168.0.11 '/sh/rec_stream.sh' &
      echo "`date +%H\ %M\ %S\ %N` asus rec stream start [OK]"
fi

#if ls /tmp/ | grep -oE "*.mp4" &>/dev/null
# then rm /tmp/*.mp4
#fi
#echo "`date +%H\ %M\ %S\ %N` rm .mp4 [OK]"

DATA=$(date +%Y-%m-%d_%H-%M-%S_%N)
echo "`date +%H\ %M\ %S\ %N` ffmpeg rec [OK]"

#ffmpeg -i http://127.0.0.1:8000/stream.mjpg -to 0:02 -c:v copy -c:a copy /tmp/$DATA.mp4 2> /dev/null
#echo "`date +%H\ %M\ %S\ %N` ffmpeg stop [OK]"

#if ls /var/www/html/mrtg/ | grep -oE "cam1.jpg" &>/dev/null
# then rm /var/www/html/mrtg/cam1.jpg
#fi
#echo "`date +%H\ %M\ %S\ %N` bash rm jpg [OK]"

ffmpeg -f MJPEG -y -i http://127.0.0.1:8000/stream.mjpg \
 -r 1 -vframes 1 -q:v 1 /var/www/html/mrtg/cam1.jpg 2> /dev/null
echo "`date +%H\ %M\ %S\ %N` frames [OK]"

convert /var/www/html/mrtg/cam1.jpg -background none -fill black -box 'white' -gravity South \
 -pointsize 20 -annotate +0+1050 $DATA /var/www/html/mrtg/cam.jpg
echo "`date +%H\ %M\ %S\ %N` image convert [OK]"

if ping -c 1 192.168.0.11 2>&1> /dev/null
 then scp /var/www/html/mrtg/cam.jpg evg@192.168.0.11:/1TB/.zm/v/$DATA.jpg 2>&1 > /dev/null &
      echo "`date +%H\ %M\ %S\ %N` scp 11 jpg [OK]"
fi
if ping -c 1 172.28.253.4 2>&1> /dev/null
 then scp /var/www/html/mrtg/cam.jpg lv@172.28.253.4:/a/$DATA.jpg 2>&1 > /dev/null &
      echo "`date +%H\ %M\ %S\ %N` scp  4 jpg [OK]"
fi

--------------------------------------------------------------
nano rec_stream.sh asus
#!/bin/bash
if ! ps aux | grep -v color | grep -v grep | grep -E ffmpeg &> /dev/null
 then DATA=$(date +%Y-%m-%d_%H-%M-%S_%N)
   ffmpeg -i http://192.168.0.4:8000/stream.mjpg \
   -to 0:10 -c:v copy -c:a copy /1TB/.zm/v/$DATA.mp4 2> /dev/null
fi

среда, 2 октября 2019 г.

ban ip iptables bash

#!/bin/bash
# clear
if cat /var/log/auth.log | grep -oE "ailed|Bad protocol" &> /dev/null;
 then sudo iptables -F
## ip error auth
cat /var/log/auth.log | grep -E "ailed|Bad protocol" >> /tmp/banip
#
sed '/ailed/d' /var/log/auth.log > /tmp/aut && mv /tmp/aut /var/log/auth.log
sed '/Bad protocol/d' /var/log/auth.log > /tmp/aut && mv /tmp/aut /var/log/auth.log

cat </tmp/ip-allow-log;
192.168.1.2
9.2.
1.1.
EOF
for IP1 in $(cat /tmp/ip-allow-log); do echo "ignore $IP1"; sed "/$IP1/d" /tmp/banip > /tmp/banip1 && mv /tmp/banip1 /tmp/banip; done

sudo /etc/init.d/rsyslog restart

#
cat /tmp/banip | grep -oE '[0-9]{1,3}(\.[0-9]{1,3}){3}' | sort | uniq > /tmp/ban-ip
##
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
## port 22,80,443
PORT='22,80,443'
## ip
cat </tmp/ip-allow16;
5.1.0.0
5.1.0.0
8.3.0.0
8.2.0.0

EOF
for IP in $(cat /tmp/ip-allow16); do echo "ACCEPT $IP"; sudo iptables -A INPUT -i ens2 -s $IP/16 -p tcp -m multiport --dport $PORT -j ACCEPT; done

##cat </tmp/ip-allow24;
##172.28.253.0
##172.28.253.0
##EOF
##for IP in $(cat /tmp/ip-allow24); do echo "ACCEPT $IP"; sudo iptables -A INPUT -i ens2 -s $IP/24 -j ACCEPT; done

cat </tmp/ip-allow32;
192.168.1.3
192.168.1.4
EOF
for IP in $(cat /tmp/ip-allow32); do echo "ACCEPT $IP"; sudo iptables -A INPUT -i ens2 -s $IP/32 -j ACCEPT; done

## read line
echo "`cat /tmp/ban-ip | wc -l` количество IP"
## ban ip
for IP in $(cat /tmp/ban-ip); do echo "Banning IN  $IP"; sudo iptables -A INPUT -i ens2 -s $IP/32 -j DROP; done
for IP in $(cat /tmp/ban-ip); do echo "Banning OUT $IP"; sudo iptables -A OUTPUT -o ens2 -d $IP/32 -j DROP; done

sudo iptables -A INPUT -i ens2 -p tcp -m multiport --dport 80,443 -j ACCEPT
sudo iptables -A INPUT -i ens2 -j DROP
#echo " read table"
#read TM
#sudo iptables-save

echo "`date -R` update ban" >> /var/log/ban-ip.txt
cp /var/log/ban-ip.txt /var/www/html/ban-ip.txt
fi

вторник, 17 сентября 2019 г.

авто переключение dns

#!/bin/bash
if cat /etc/resolv.conf | grep nameserver | grep -o "127" &>/dev/null;
 then if ip a | grep -v "inet6" | grep -v "127.0.0.1" | grep inet | grep -oE '[0-9]{1,3}(\.[0-9]{1,3}){3}' | grep -v ".255" | grep ".1\.[0-9]" | grep -o "[0-9].*" &>/dev/null;
  then echo "nameserver 192.168.1.1" > /etc/resolv.conf
  else if ip a | grep -v "inet6" | grep -v "127.0.0.1" | grep inet | grep -oE '[0-9]{1,3}(\.[0-9]{1,3}){3}' | grep -v ".255" | grep ".10\.[0-9]" | grep -o "[0-9].*" &>/dev/null;
   then echo "nameserver 192.168.10.1" > /etc/resolv.conf
  fi
 fi
fi

if cat /etc/resolv.conf | grep nameserver | grep -o ".1\.[0-9]" | grep -o "[0-9].*" &>/dev/null;
 then if ip a | grep -v "inet6" | grep -v "127.0.0.1" | grep inet | grep -oE '[0-9]{1,3}(\.[0-9]{1,3}){3}' | grep -v ".255" | grep ".10\.[0-9]" &>/dev/null;
  then sudo echo "nameserver 192.168.10.1" > /etc/resolv.conf
 fi
fi

if cat /etc/resolv.conf | grep nameserver | grep -o ".10\.[0-9]" | grep -o "[0-9].*" &>/dev/null;
 then if ip a | grep -v "inet6" | grep -v "127.0.0.1" | grep inet | grep -oE '[0-9]{1,3}(\.[0-9]{1,3}){3}' | grep -v ".255" | grep ".1\.[0-9]" | grep -o "[0-9].*" &>/dev/null;
  then echo "1"
 sudo echo "nameserver 192.168.1.1" > /etc/resolv.conf
 fi
fi

среда, 17 апреля 2019 г.

переключение на резервный канал

#!/bin/sh
while true; do

# Доступность этого хоста будет означать корректную работу оснвного канала
# 8.8.8.8 это DNS от Google. За его доступность можно не беспокоиться
# А значит вероятность ложного срабатывания минимальна
HOST="8.8.8.8"

# Файл-флаг. Появляется при переключении на резервный канал
LOCKFILE="/tmp/check_internet.lock"

# Файл журнала
LOGFILE="/var/log/check_internet.log"

# Пингуем проверочный хост через основной канал
ping -I enp1s0 -c 3 -n -q ${HOST} > /dev/null

# Если возникла ошибка (хост не доступен)
if [ $? -ne "0" ]; then
        # Если нет файла-флага
        if [ ! -f ${LOCKFILE} ]; then
                # Добавляем маршрут для пинга основного канала
                sudo route add 8.8.8.8/32 gw 192.168.0.1
                # Меняем маршрут по умолчанию в основной таблице роутинга
                sudo ip route del default
#                sudo ip route add default dev enp0s26u1u1 metric 100
                sudo ip route add default via 192.168.2.1 metric 100
                # NAT 4G
                sudo iptables-restore < /iptables.usb
                # restart squid
                /sh/squid-restart.sh
                # Создаём файл флаг
                sudo touch ${LOCKFILE}
                # Делаем запись в файл журнала
                echo `date +'%Y/%m/%d %H:%M:%S'` Internet connection changed to 4G >> ${LOGFILE}
                sudo chmod 777 /var/log/check_internet.log
        fi
# Если же всё хорошо
else
        # Если есть файл-флаг
        if [ -f ${LOCKFILE} ]; then
                # Меняем маршрут по умолчанию в основой таблице роутинга
                sudo ip route del default
                sudo ip route add default via 192.168.0.1 metric 100
                # NAT LAN
                sudo iptables-restore < /iptables.lan
                # restart squid
                /sh/squid-restart.sh
                # Удаляем файл-флаг
                sudo rm -rf ${LOCKFILE}
                # Записываем событие в файл журнала
                echo `date +'%Y/%m/%d %H:%M:%S'` Internet connetction changed to LAN >> ${LOGFILE}
                sudo chmod 777 /var/log/check_internet.log
        fi
fi


done

# Generated by iptables-save v1.6.0 on Sun Jan 13 16:08:31 2019
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [1:120]
:POSTROUTING ACCEPT [0:0]
#-A POSTROUTING -o usb0 -j MASQUERADE
-A POSTROUTING -o enp0s26u1u1 -j MASQUERADE
COMMIT
# Completed on Sun Jan 13 16:08:31 2019
# Completed on Thu Sep 13 15:53:21 2018
# Generated by iptables-save v1.6.0 on Thu Sep 13 15:53:21 2018
*filter
:INPUT DROP [5:204]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [51:7292]
-A INPUT -i lo -j ACCEPT
-A INPUT -i enp0s26u1u1 -j ACCEPT
-A INPUT -i wlp4s0 -j ACCEPT
-A INPUT -i enp1s0 -j ACCEPT
-A INPUT -i eth0 -j ACCEPT
-A INPUT -i eth1 -j ACCEPT
-A INPUT -i wlan0 -j ACCEPT
-A INPUT -i wlan1 -j ACCEPT
-A INPUT -i ppp+ -j ACCEPT
-A INPUT -i tun6 -j ACCEPT
-A INPUT -p udp -m policy --dir in --pol ipsec -m udp --dport 1701 -j ACCEPT
-A INPUT -p esp -j ACCEPT
-A INPUT -p ah -j ACCEPT
-A INPUT -p udp -m udp --dport 500 -j ACCEPT
-A INPUT -p udp -m udp --dport 4500 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i wlp4s0 -o enp0s26u1u1  -j ACCEPT
-A FORWARD -i enp0s26u1u1 -o wlp4s0  -j ACCEPT
-A FORWARD -i enp1s0 -o enp0s26u1u1  -j ACCEPT
-A FORWARD -i enp0s26u1u1 -o enp1s0  -j ACCEPT
-A FORWARD -i tun+ -o wlan0 -j ACCEPT
-A FORWARD -i wlan0 -o tun+ -j ACCEPT
-A FORWARD -i eth0 -o wlan0 -j ACCEPT
-A FORWARD -i wlan0 -o eth0 -j ACCEPT
-A FORWARD -i usb0 -o wlan0 -j ACCEPT
-A FORWARD -i wlan0 -o usb0 -j ACCEPT
COMMIT
# Completed on Thu Sep 13 15:53:21 2018

h265.sh

#!/bin/bash file="../mp4" if [ -d $file ]; then         echo "  Директория существует :-) "         for i in *.mp4; do f...