JustPaste.it

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

nopaywall

https://t.me/nopaywall

Содержание статьи

Консольные клиенты есть практически для всех популярных веб-сервисов. Многие из них не блещут возможностями и тем более удобством в работе. Но их можно заскриптовать и приспособить для совершенно неожиданных целей: превратить Google Calendar в систему удаленного исполнения команд, использовать Telegram для поиска украденного ноутбука, мониторить сервер с помощью Twitter, организовать скрытый стриминг на YouTube. Об этих и других трюках мы и расскажем.
 

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 сразу после загрузки системы
 

Как установить и настроить

Для установки 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
 

Как установить и настроить

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