воскресенье, 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

суббота, 4 февраля 2017 г.

как обезопасить свои страницы в соц сетях

  На просторах интернет огромное количество жалоб на то, что украли страницу в вк, ок или еще где. Зачастую пользователи меняют пароль ТОЛЬКО из-за ультиматума сайта. Да и меняют его, не вникая, как и где могли утечь их пароли. По сути проблема не решается ТОЛЬКО сменой пароля! Надо понимать, какими способами пользуются интернет-хулиганы (по другому сложно назвать. часто этим балуются не особо умные школьники, чтобы похвастать перед одноклассниками) для кражи\подбора логина\пароля. Понимая основы, можно начать принимать активные действия по предотвращению дальнейших взломов своих аккаунтов. Далее будет не большой список советов, который, надеюсь, окажется полезным:

    первый совет:
Не пользуйся короткими ссылками! (за ними может скрываться все что угодно! например, левый сайт -ловушка для кражи паролей)
    второй совет:
Не пользуйся вай-фай вне своего дома! (для входа на сайты, требующие логин\пароль)
    третий совет:
Мобильный телефон должен быть чист от шпионов (для этого рекомендую вдумчиво искать решения конкретных задач [прехват трафика, отправка гео данных...] )
    четвертый совет:
Не пользуйся прокси\анонимайзерами\VPN, которые тебе не подконтрольны (с большой долей вероятности эти БЕСПЛАТНЫЕ\иВозможноПлатные созданы для сбора паролей)
    пятый совет:
Пароль ОБЯЗАН быть сложным (сложный, это не: [va5ya] такое подбирается словарями очень быстро)

  Пробежимся по этим советам и посмотрим, как же могли утечь наши пароли.


  1. Под укороченной ссылкой можно скрыть страницу-двойника, который для вас будет полностью копией например vk.com. Попросит сайт снова ввести логин\пароль и с большой долей вероятности, 90% пользователей именно так и сделает - введет пароль и логин. Кроме кражи пароля есть есть способы выяснить откуда посетитель с точностью до провайдера.
  2. Первая и главная опасность - открытые и бесплатные сети. Приманка для не опытного пользователя. Кража паролей с большой долей вероятности и есть цель создания таких сетей. Не говоря уже о школьниках, которые пробуют себя в роли кхакеров, осуществляя arp-spoofing. Либо создавай точный дубликат существующей сети для все тех же целей - отлова паролей.
  3. Многие мобильный телефон не воспринимают как угрозу. Напрасно! Сейчас телефон - это такой миниатюрный банк данных (в том числе компромата). Общая рекомендащия: иметь звонилку без доступа к интернет для получения одноразовых паролей. Лучше защиты не придумать (для рядового гражданина. для серьезных людей этот совет не пригодится). В смартфоне вероятность встроенного\случайно установленного трояна очень большая. Полученные одноразовые пароли (да-да, одноразовый пароль не гарантирует защиту на 100%) могут быть скрытно отправлены злоумышленникам. Ваше географическое положение может быть получено без вашего согласия. Достаточно взлянуть на историю сохранненую Гуглом в личном кабинете, все встанет на свои места. ВЫКЛЮЧАЙ GPS, когда в нем нет необходимости!
  4. проски и т.д. уже описал опасности
  5. в общем и так все ясно

четверг, 2 февраля 2017 г.

Yandex Metro на службе у шпионов - ссылка прямо на местоположение "клиента"

#!/bin/bash
# A0:F3:C1:3B:6F:90
echo "";
echo " MAC: [ A0:F3:C1:3B:6F:90 ]"
read MAC1

##https://api.mylnikov.org/wifi/main.py/get?bssid=A0:F3:C1:3B:6F:90
curl --cookie /tmp/cookies.txt --cookie-jar /tmp/newcookies.txt -i -s -k -X 'POST' \
-H 'User-Agent: Dalvik/2.1.0 (Linux; U; Android 5.0.1; Nexus 5 Build/LRX22C)' -H 'Content-Type: application/x-www-form-urlencoded' \
"https://api.mylnikov.org/wifi/main.py/get?bssid=$MAC1" > /tmp/MAPS
echo "";
MAP1=`cat /tmp/MAPS | grep -oE "result*....." | sed 's/^........//'`
MAP2=`cat /tmp/MAPS | grep -oE "lat*................." | sed '1!d' | sed 's/^......//' | grep -oE "*.*[0-9]"`
MAP3=`cat /tmp/MAPS | grep -oE "lon*................." | sed 's/^......//' | grep -oE "*.*[0-9]"`

if [ "$MAP1" = 200 ]; then
echo "$MAP2"
echo "$MAP3"
echo "";
echo "https://www.google.ru/maps/@$MAP2,$MAP3,19z?hl=ru"
else
echo "Not found! At this time, safely."
fi
echo "";

h265.sh

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