Хакер - Веб глазами юниксоида. Автоматизируем работу с веб-сервисами с помощью скриптов
nopaywall

Содержание статьи
- Telegram как инструмент защиты ноутбука
- Как установить и настроить
- Управление компом с помощью Pushbullet
- Как установить и настроить
- Отправка скрытых команд с использованием Google Calendar
- Как установить и настроить
- Twitter и мониторинг сервера
- Как установить и настроить
- Динамическая подпись для форума с помощью Dropbox
- Консольный Speedtest
- Автоматическое скачивание нового видео из YouTube
- Как установить и настроить
- Стриминг в YouTube
- Перевод строки по хоткею
- Reddit как источник свежих обоев
- Выводы
Telegram как инструмент защиты ноутбука
О том, как использовать Telegram для ведения заметок и обмена ссылками между разными устройствами, знают все. Но что, если пойти дальше и превратить его в нечто большее? Например, систему сигнализации, которая будет информировать тебя, когда кто-то посторонний включит ноутбук?
Для этого можно использовать консольный клиент telegram-cli и такой скрипт:
#!/bin/bash ffmpeg -y -t 1 -f video4linux2 -s 640x480 -r 30 -i /dev/video0 -f image2 $HOME/webcam.png sleep 5m scrot -z %HOME/screen.png telegram-cli -W -D -e "send_photo @USERNAME $HOME/webcam.png `date`" telegram-cli -W -D -e "send_photo @USERNAME $HOME/screen.png `date`" notify-send -i dialog-warning -t 10000 "Ты. Да, да. Ты." "Тебе кто разрешил?"
Скрипт следует поместить в автозагрузку. Сразу после старта машины он сделает фотографию с веб-камеры, снимет скриншот, отправит все это указанному пользователю и выведет на экран грозное сообщение.
Автозапуск скрипта при загрузке можно настроить привычными графическими средствами. Например, в KDE для этого есть специальный пункт меню в системных настройках.
Сообщения, отправленные в Telegram сразу после загрузки системыКак установить и настроить
Для установки telegram-cli пользователям Arch Linux и основанных на нем систем достаточно выполнить
$ yaourt -S telegram-cli-git
Пользователям остальных систем придется собрать клиент самостоятельно с помощью ./configure и make, предварительно установив Readline, OpenSSL, libconfig, liblua, Python и libjansson.
В момент первого запуска telegram-cli запросит номер телефона в формате +71234567890, а затем код безопасности из СМС и пароль, если он используется.
Управление компом с помощью Pushbullet
С помощью консольного клиента Pushbullet приведенный выше скрипт можно дополнить функцией отправки СМС на указанный телефон (сообщение придет с подключенного к Pushbullet смартфона):
$ pb sms -d 0 -n +12345678901 "Началось!"
Но гораздо интереснее использовать Pushbullet в противоположном направлении, отправляя со смартфона на компьютер пуш-сообщения c командами на исполнение (например, Y3g5f27g shutdown -P):
#!/bin/bash PASS="Y3g5f27g" while : do CMD=$(pb list | grep $PASS | cut -c 10-) if [ "$CMD" ]; then pb purge $CMD fi sleep 5m done
Префикс в начале сообщения (Y3g5f27g) нужен, чтобы отфильтровать лишние сообщения и обеспечить защиту от несанкционированного доступа. По завершении цикла команда в сообщении будет выполнена, а само сообщение удалено.
Скрипт следует поместить в автозагрузку, предварительно установив и настроив pushbullet-cli.
Команда, отправленная на компьютер с помощью PushbulletКак установить и настроить
Pushbullet-cli можно установить из репозитория Python:
$ pip install pushbullet-cli
После установки необходимо пройти авторизацию, введя токен с помощью такой команды:
$ pb set-key
Сам токен можно получить в панели управления на сайте сервиса:«Settings → Account → Access Tokens», нажав кнопку «Create Access Token».
Отправка скрытых команд с использованием Google Calendar
Если использование системы push-уведомлений для управления компом тебе кажется слишком очевидным, то у меня есть хорошие новости. То же самое можно организовать с помощью календаря Google. Вряд ли разработчики консольного клиента Gcalcli предполагали, что кто-то станет его использовать таким образом, но мы простых путей не ищем.
Скрипт выглядит так:
#!/bin/bash while : do CMD=$(gcalcli search "Y3g5f27g" '2017-09-02T14:00' '2017-09-02T15:00' | cut -c 42-) if [ "$CMD" ]; then gcalcli delete --iamaexpert "Y3g5f27g" '2017-09-02T14:00' '2017-09-02T15:00' $CMD fi sleep 5m done
Чтобы отправить команду, необходимо создать в календаре мероприятие с маркером Y3g5f27g (например, Y3g5f27g shutdown -P) в промежутке между 14:00 и 15:00 часами 2 сентября 2017 года. Скрипт выполнит указанную команду и удалит мероприятие.
Как установить и настроить
Gcalcli можно установить из репозитория Python:
$ pip install gcalcli
Для авторизации приложения в сервисе достаточно запустить его с любым аргументом:
$ gcalcli list
Процесс авторизации запустится в автоматическом режиме в веб-браузере. Просто следуй появляющимся инструкциям.
Twitter и мониторинг сервера
Еще одно полезное применение веб-сервисов — мониторинг сервера. Письма со сводкой данных о состоянии сервера — прошлый век, сегодня миром правят твиттер и мессенджеры, поэтому почему бы не использовать их?
Следующий скрипт отправляет сообщение с данными о состоянии машины, используя консольный клиент твиттера Oysttyer:
#!/bin/bash HOST=`hostname -s` UP=`uptime | cut -d" " -f4,5 | cut -d"," -f1` LOAD=`uptime | cut -d":" -f5,6` MEM=`ps aux | awk '{ sum += $4 }; END { print sum }'` CPU=`ps aux | awk '{ sum += $3 }; END { print sum }'` tweet="Host: ${HOST}, uptime ${UP}, cpu: ${CPU}%, memory: ${MEM}%, loadavg ${LOAD}" if [ $(echo "${tweet}" | wc -c) -gt 140 ]; then echo "ОШИБКА: Длина сообщения превышает 140 знаков!" exit 1 fi echo $tweet echo $tweet | oysttyer -script
Его следует повесить на исполнение с определенным интервалом в cron. Вместо Oysttyer можно использовать другой консольный клиент — bti. В этом случае последнюю строку скрипта следует изменить на такую:
echo $tweet | bti --action update
Как установить и настроить
Oysttyer доступен в репозиториях большинства популярных систем. Самая свежая версия на Гитхабе: клонируешь репозиторий, копируешь бинарник oysttyer без расширения .pl в каталог /usr/bin с правами 755.
Для авторизации приложения в сервисе достаточно во время первого запуска перейти по указанной ссылке, принять предложение об авторизации, скопировать сгенерированный PIN, вернуться в терминал и вставить его.
Динамическая подпись для форума с помощью Dropbox
Есть масса различных вариантов использования Dropbox. Мы придумаем еще один: настроим автоматическое формирование динамической подписи для форума, в которой будет инфа о текущей конфигурации нашей системы. Для этого понадобится screenfetch, imagemagick и такой скрипт:
#!/bin/bash while : do echo `screenfetch -n | grep OS | cut -c 20- && screenfetch -n | grep Kernel | cut -c 24- && screenfetch -n | grep DE | cut -c 20-` | convert -pointsize 18 -transparent white label:@- $HOME/Dropbox/scrf.png sleep 12h done
Скрипт формирует изображение небольшого размера и сохраняет его в папку, отслеживаемую и синхронизируемую Dropbox, а затем засыпает на двенадцать часов.
Чтобы вставить изображение в подпись на форуме, необходимо создать прямую ссылку на файл scrf.png. Это можно сделать с помощью веб-интерфейса Dropbox (функция «Поделиться») либо с помощью официального скрипта:
$ dropbox sharelink ~/Dropbox/scrf.png
Перед вставкой полученной ссылки в подпись форума замени ?dl=0 на ?raw=1.
Подпись на форуме, изменяющаяся вслед за сменой версии упомянутых в ней компонентовКонсольный Speedtest
У Speedtest тоже есть консольный клиент — speedtest-cli. И да, сам бог интернета велел использовать его для формирования подписи на форуме:
#!/bin/bash wget $(speedtest-cli --simple --share | grep Share | cut -c 16-) -b -O $HOME/Dropbox/scrf.png
Пока что утилита предлагает только старую версию баннера. Но возможно, автор примет отправленный ему пулл-реквест и внесет изменения в исходники. Установить клиент можно из репозитория Python:
$ pip install speedtest-cli
Автоматическое скачивание нового видео из YouTube
Скачивание видеоконтента, размещенного на YouTube, запрещено пользовательским соглашением сервиса. Тем не менее интернет изобилует инструментами, с помощью которых можно нажатием одной кнопки получить копию видеоролика себе на компьютер.
Нам, конечно, интересно сделать это с помощью консольных инструментов, которые легко бы поддавались скриптованию. Например, youtube-dl.
Представленный ниже скрипт при первом запуске скачивает все содержимое указанного в нем плей-листа YouTube, а затем каждый час проверяет этот плей-лист на появление нового видео, скачивает это видео в случае обнаружения и уведомляет об этом. Скрипт удобно использовать на своем домашнем сервере: ты просто добавляешь новое видео в плей-лист со смартфона по пути домой, а скрипт его скачивает еще до твоего прихода.
Чтобы отключить автоматическую проверку на новое видео каждый час, достаточно закомментировать первые две и последние две строки скрипта.
#!/bin/bash while : do # Адрес плей-листа URL="https://www.youtube.com/playlist?list=PLj5JpYuSlJ--mjBa1WPOZVckzCgI1pxWm" CMD=$(echo `youtube-dl -s --download-archive ~/.archive.txt -o '~/Youtube/%(uploader)s/%(playlist_index)s - %(title)s.%(ext)s' $URL` | grep -m 1 MPD | cut -c 1) if [ "$CMD" ]; then youtube-dl -R --download-archive ~/.archive.txt -o '~/Youtube/%(uploader)s/%(playlist_index)s - %(title)s.%(ext)s' $URL notify-send -i dialog-warning -t 120000 "Youtube-dl" "Загружено новое видео" fi sleep 1h done
Как установить и настроить
Все очень просто:
$ sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl $ sudo chmod a+rx /usr/local/bin/youtube-dl Стриминг в YouTube
После того как ты посмотрел на других, самое время показать и себя. Все на том же ютубе, подтвердив свою учетную запись через СМС и получив в «Творческой студии» собственный ключ трансляции, можно организовать стриминг. FFmpeg неплохо с этим справляется:
##!/bin/bash ## Ключ авторизации PID="xxxx-xxxx-xxxx-xxxx" ## Битрейт BR="2500k" ffmpeg \ -f alsa -ac 1 -i pulse \ -f v4l2 -r 10 -framerate 30 -i /dev/video0 \ -vcodec libx264 -pix_fmt yuv420p -preset ultrafast -g 20 -b:v $BR \ -acodec libmp3lame -ar 44100 \ -threads 0 -bufsize 512k \ -f flv rtmp://a.rtmp.youtube.com/live2/$PID &> stream.log
Заменой строки
-f v4l2 -r 10 -framerate 30 -i /dev/video0 \
на
-f x11grab -r 10 -s 1024x720 -i :0.0+0,24 \
можно заставить сценарий транслировать не изображение с веб-камеры, а скринкаст монитора. Разумеется, адрес устройства (ls /dev/video*) в первом случае и разрешение монитора во втором необходимо установить свои.
Перевод строки по хоткею
Средств языкового перевода текста в последнее время развелось порядочно. Некоторые из них способны даже похвастать использованием в своей работе искусственного интеллекта. И хотя порой результаты их труда наводят на мысль об интеллекте удава, тем не менее подобный сервис в повседневной работе будет неплохим подспорьем.
Раз уж средств перевода много, то и при выборе консольного приложения стоит предпочесть такое, которое способно в своей работе задействовать если не все, то хотя бы самые популярные из них. Translate shell их знает и широко использует в своей работе, предлагая в режиме командной строки перевод введенного с клавиатуры текста, текстовых файлов и даже веб-страниц в интернете.
Правда, иногда, даже если сносно владеешь иностранным языком, могут встретиться незнакомые фразы, не понимая которые трудно разобрать смысл прочитанного. Не лезть же ради этого в терминал. Тут на выручку приходит специальный сценарий:
#!/bin/bash notify-send "Ищу перевод..." " " TEXT=$(xclip -selection primary -o) TRANS=$(translate-shell -b "$TEXT" -output $HOME/.trans.txt) TRAX=$(cat $HOME/.trans.txt) TRAN=$(echo -e "$TRAX n" >> /tmp/trans.txt) cp /dev/null $HOME/.trans.txt $TRANS if [ "$TRAX" ]; then notify-send "ПЕРЕВОД:" "$TRAX" $TRAN else notify-send "ОШИБКА:" "Нет связи с сервисом" fi
Достаточно привязать запуск этого сценария к предпочтительному сочетанию клавиш, чтобы при их зажатии перевод на русский язык выделенного перед этим текста выводился в виде всплывающего сообщения и одновременно дописывался в текстовый файл во временной папке. Язык оригинала translate-shell определит самостоятельно. При отсутствии связи с сетевым сервисом сценарий предусмотрительно об этом уведомит.
Вывод перевода выделенного текста во всплывающем сообщенииReddit как источник свежих обоев
Человеку, переложившему часть ежедневной рутины на своего электронно-вычислительного брата, на первых порах, чтобы как-то собраться с мыслями от избытка обрушившегося свободного времени, ничего не остается, как созерцать обои на рабочем столе своего монитора. В такие минуты кто-то решит, что новогодние пейзажи, пережившие лето, смотрятся совсем уж неуместно, и тогда начнет лихорадочно прочесывать фотобанк в поисках подходящих картинок.
К счастью, у нас в запасе остался сценарий, который не только меняет обои рабочего стола, но и избавляет пользователя от бремени их поиска и выбора. Функцию установки обоев из подборки выполняет консольный feh, а саму подборку wget со товарищи выуживают из Reddit.
#!/bin/bash wget -O - http://www.reddit.com/r/wallpaper | grep -Eo 'http://i.imgur.com[^&]+jpg' | shuf -n 1 | xargs wget -O background.jpg feh --bg-fill background.jpg
Выводы
Это лишь несколько примеров того, как можно использовать консольные инструменты для взаимодействия с веб-сервисами. При желании ты можешь их комбинировать и переделывать под другие сервисы. Например, использовать скрипт мониторинга сервера в сочетании с Telegram вместо Twitter или, наоборот, отправлять алармы о включении компа в DM твиттера вместо телеграма. Ну и конечно же, придумать свои собственные варианты использования!
Читайте ещё больше платных статей бесплатно: https://t.me/nopaywall