Интерактивный скрипт для переключения VPN’ок

Старая версия скрипта Че-то решил переделать.

1. Заводим переменную для хранения каталога с конфигами:

CONFIGDIR="~/openvpn/configs"

2. Добавляем функции create_list() и ask_list() по этому вот рецепту

create_list() #$1 - dir, $2 - file mask
{
    FOUNDLST=""
    for FLE in $(find $1 -maxdepth 1 -iname $2|sort); do
	if [ -n "$FLE" ]; then
	    FOUNDLST="$FOUNDLST"`basename $FLE`"\n"
	fi
    done
}

ask_list() #$1 - list #$2 - header
{
    LIST_BUF=$1
    LIST_BUF="$LIST_BUF""Exit "
    LIST_BUF="$LIST_BUF""Down"
    LIST_BUF=`echo -e "$LIST_BUF"|sed 's/\n/ /'`
    
    PS3=$2
    
    echo
    select LIST_RET in $LIST_BUF; do
	if [ -n "$LIST_RET" ];then
	    break
	fi
    done
    
}

Единственное что, в create_list() добавляем сортировку (sort), а в ask_list() два пункта — для выхода из скрипта и для разрыва соединения.

3. Делаем функцию для разрыва соединения:

ovpn_down()
{
    echo -n "Down connection..."
    CTR=0
    pkill openvpn
    while [ "$CTR" -ne "1" ];do
	echo -n "."
	CTR=`ps ax|grep -c "openvpn"`
	sleep 1
    done
    echo
}

4. Основной скрипт.
4.1. Создаем список из файлов конфигов
4.2. Выводим список на экран и ожидаем ответа пользователя.
4.3. Выводим пользователю, что он выбрал.
4.5. Проверяем, не выбран ли выход — если выбран, завершаем работу скрипта.
4.6. Если выбран пункт Down, то вызываем функцию разрыва соединения и выходим.

create_list $CONFIGDIR "*.ovpn"
ask_list $FOUNDLST "Select config: "
echo "Selected: $LIST_RET"

if [[ "$LIST_RET" == "Exit" ]]; then
    echo "Exitting..."
    exit 0
fi

if [[ "$LIST_RET" == "Down" ]]; then
    ovpn_down
    exit 0
fi

4.7. Если до этого не вышли, завершаем прошлое соединение, если оно установлено:

ovpn_down

4.8. Поднимаем новое соединение (да, тут отправляю лог Openvpn на третий терминал):

echo "Up connection..."
openvpn --config "$CONFIGDIR/$LIST_RET" >/dev/tty3 &

4.9. Запускаю скрипт waiter на 10 секунд

~/scripts/waiter 10

Скрипт целиком

1. На PasteBin
2. На GitHub

Автоматическое обновление пароля для vpnbook.com

Преамбула

На самом деле прошло куча времени, после того, как я заходил на vpnbook.com и пользовался их бесплатным vpn-сервисом. Ну так вот, есть проблема, сервис-то бесплатный, а пароль периодически менялся. Раньше было проще — пароль был на странице, и его можно было просто сграббить, а теперь нет — пароль нарисован на картинке.

Дополнительные приложения

1. Нам понадобится какой-то парсер HTML
2. Понадобится какая-нибудь распознавалка текста на картинке, тобишь OCR, поддерживающая режим командной строки, благо в линуксах есть их от слова, хоть дупой жуй. Я использовал самую известную и проверенную, Tesseract называется, распознает все на ура. Картинку с паролем, слава Ктулху, владельцы сервиса (пока) не зашумили и не испоганили, так что распознавание пройдет без дополнительного геморроя.
3. Для отладки можно показывать изображение перед распознаванием прямо в консоли, чтоб это работало, можно установить FIM (копия)

Установка Tesseract

В Slackware проще всего установить его через sbopkg. В своих дистрах сами разбирайтесь.

1. Ставим sbopkg, если не стоит, с официального сайта или обновляем если стояла поросшая мхом версия со старым репозиторием в конфиге

2. Запускаем sbopkg В поиске (Search) вводим leptonica, и устанавливаем самую свежую версию. Это зависимость, т.е. библиотека, необходимая для Tesseract. Нашли — жмем Process и уходим курить.

3. Когда все скомпилировалось и поставилось, аналогичным образом ставим Tesseract.

Подготовка

1. Заводим необходимые переменные:

#!/bin/bash

VPNBOOKPAGE="https://www.vpnbook.com/"
WORKDIR="/tmp/vpnbook/"
HTMLFILE="vpnhtml.html"
PASSIMG="password.png"
AUTHPATH="~/openvpn/vpnbook/vpnbook.auth"

2. Перед скачиванием удаляем временный файлы и создаем рабочий каталог, если не существует (если существует, то ключ -p в команде mkdir поможет избежать ошибки):
rm "$WORKDIR$HTMLFILE" 2>/dev/null
rm "$WORKDIR$PASSIMG" 2>/dev/null
mkdir -p "$WORKDIR"

3. Скачиваем страницу с паролем:

echo -n "Get vpnbook page..."
wget -P "$WORKDIR" --default-page="$HTMLFILE" --header="Content-type: text/html" "$VPNBOOKPAGE" 2>/tmp/vpnpass.err.log

Примечание: Почему-то wget всю информацию, вне зависимости от того, произошла ошибка, или все прошло штатно, выкидывает на stderr, посему переопределяем в отдельный лог всю информацию из stderr, чтоб экран не загаживала: 2>/tmp/vpnpass.err.log

4. Проверяем, загрузилось или нет:

if [[ ! -f "$WORKDIR$HTMLFILE" ]];then
    echo
    echo "Page not downloaded!"
    exit
else
    echo "OK"
fi

Получение картинки с паролем

1. Вытаскиваем все ссылки на картинки со страницы
2. Отфильтровываем нужные grep'ом: grep "password.php"
3. Выбираем одну (их там две одинаковых): head -n1
4. Заменяем пробел в ссылке на знак +, что понадобится для получения картинки (пробел в POST или GET запросе заменяется на +). Притворяемся браузером.
5. Объединяем это в одну команду, и сохраняем ссылку в переменную:

echo -n "Get password image..."
PASSLNK=`xidel -s --extract "//img/@src" "$WORKDIR$HTMLFILE"|grep "password.php"|head -n1|sed 's% %+%'`

6. Загружаем картинку себе:

wget "$VPNBOOKPAGE$PASSLNK" -O "$WORKDIR$PASSIMG" 2>>/tmp/vpnpass.err.log

7. Проверяем, успешно ли прошла загрузка:

if [[ ! -f "$WORKDIR$PASSIMG" ]];then
    echo
    echo "Image not downloaded!"
    exit
else
    echo "OK"
fi

8. Для отладки показываем картинку перед распознаванием, если был указан соответствующий ключ (-s):

if [[ "$1" == "-s" ]];then
    fim "$WORKDIR$PASSIMG"
fi

Распознавание изображения и сохранение пароля

Для распознавания текста, нам придется воспользоваться OCR tesseract. Поскольку текст на английском и довольно прост для распознавания, то из всей мощи Tesseract’а (а инструмент и правда очень крутой), мы воспользуемся самым простым вариантом — все оставим по умолчанию, а результат распознавания выведем на stdout

Примечание: Tesseract’у нужно обязательно указывать, куда выводить результат распознавания. Это второй параметр в команде.

Команда распознавания:

tesseract "$WORKDIR$PASSIMG" stdout

Сохраняем результат в переменную:

VP_PASSWORD=`tesseract "$WORKDIR$PASSIMG" stdout`

Выыодим полученный пароль на экран и сохраняем его в авторизационный файл для Openvpn:

echo -n "Recognize image..."
VP_PASSWORD=`tesseract "$WORKDIR$PASSIMG" stdout`
echo "OK"
echo "Password: $VP_PASSWORD"
if [ -z "$VP_PASSWORD" ]; then
    echo "Password is empty. Exitting!"
    exit
fi

echo -n "Update autorisation file $AUTHPATH..."
echo "vpnbook" >"$AUTHPATH"
echo -n "$VP_PASSWORD">>"$AUTHPATH"

echo
echo "Complete!" 

Кто пользуется PPTP

Может совместить этот скрипт со старым скриптом, для обновления конфигов PPTP (новые конфиги делайте сами по образцу). Ссылка на старый скрипт

Скрипт целиком

На GitHub

На PasteBin специально не кладу, поскольку там есть стукачи, которые доносят владельцам сервиса, что появился новый скрипт по выдиранию пароля. А по-русски владельцы сервиса читать не умеют. Да и на Гитхабе лежал скрипт четырехсотлетней давности, так что не догадаются, что обновился.

Обновление sbopkg и подключение репозитория от Slackware 14.2

Я по дурости поставил в новую слаку старый sbopkg, но поскольку ничего с него до сей поры не устанавливал, то как-то и не замечал. Понадобилось, а смотрю, репозиторий-то в нем от старой слаки.

Процедура обновления

Все делаем под root’ом

1. Сносим старый пакет через removepkg, например (смотрите точное имя пакета средствами своей системы):

removepkg sbopkg-0.30.0-i486

2. Удаляем содержимое каталога /var/lib/sbopkg/

3. Качаем свежий sbopkg с официального сайта Прямая ссылка на пакет

4. Устанавливаем:

installpkg sbopkg-0.38.1-noarch-1_wsr.tgz

5. Идем в /etc/sbopkg, видим там 2 файла sbopkg.conf и sbopkg.conf.new. Из sbopkg.conf копируем (тем же mcedit‘ом) в sbopkg.conf.new значения переменных, если в старом конфиге их меняли. У меня, например, сменяно значение OUTPUT, каталога, куда будет сохраняться готовый пакет:

export OUTPUT=${OUTPUT:-/root/sbopackets}

6. Переименовываем sbopkg.conf.new в sbopkg.conf

7. Видел рекомендацию почистить кэш со скачанными исходниками (по умолчанию /var/cache/sbopkg переменная SRCDIR в конфиге), но хз. Я почистил, сохранив некоторые архивы.

8. Запускаем sbopkg и в меню выбираем Sync, чтоб он синхронизировался с репозиторием. Новый репозиторий прописан в новом конфиге по умолчанию.

ФАНФАРЫ!

Источник

linuxquestions.org

Автоматическое получение конфигов Openvpn для бесплатного VPN от vpnbook.com

Преамбула

Есть относительно неплохой бесплатный сервис VPN vpnbook.com, мы про него когда-то давно писали, а я одно время даже активно пользовался, пока меня не задолбали некоторые ограничения, и я не перешел на лучший и более надежный в плане безопасности Riseup, но в качестве резерва, почему бы не иметь и его? Заодно и знакомый попросил его настроить.
В общем, пошел я на сайт, а там все изменилось, появились и периодически добавляются новые сервера, старые подохли, в общем контора активно цветет и пахнет.

Так вот, на случай появления новых серверов, придется идти на сайт, скачивать конфиги, при необходимости добавлять свои параметры, и т.д. А зачем это каждый раз делать руками, если можно автоматизировать?

Описание задачи

1. Вытащить с сайта список конфигов
2. Скачать архивы конфигов на локальный компьютер и распаковать их
3. Автоматически добавить в конфиг дополнительные параметры, например изменить уровень script-security и добавить пользовательские скрипты, выполняющиеся при соединении и разрыве соединения с сервером, и т.д. Подробности тут или тут
4. Конфиги для каждого сервера поставляются в нескольких вариантах, для соединения по разным портам, например TCP 443, TCP 80, UDP 25000, UDP 53. Сервера различаются по странам. Соответственно, надо предусмотреть возможность выбора всех или определенных конфигов.

Дополнительные программы

Нам понадобится какой-нибудь парсер HTML. Я использую xidel, о котором недавно писал

Подготовительные действия

1. Добавляем в начало скрипта необходимые переменные:

VPNBOOKPAGE="https://www.vpnbook.com/"
WORKDIR="/tmp/vpnbook/"
UNPDIR="/tmp/vpnbook/unpack/"
HTMLFILE="vpnhtml.html"

Страница, с которой будем выдирать ссылки на архивы, рабочий каталог скрипта, каталог, куда будем распаковывать архивы и имя файла, под которым сохраним HTML-страницу сайта с нужными данными.

2. Предусматриваем возможность удалить каталог с распакованными конфигами (если пользователь запустит скрипт с ключом ):

if [[ "$1" == "-c" ]]; then
    echo "Cleaning  unpack directory..."
    rm -rf "$UNPDIR"
fi

3. Удаляем ранее сохраненный HTML-файл (иначе новые wget будет сохранять под именами vpnhtml.html.1, vpnhtml.html.2 и т.д.) и создаем рабочий каталог и каталог для распаковки архивов. Путь будет создан со всеми подкаталогами, если он ранее не существовал. Если каталог уже существовал, то никакой ошибки не будет.

rm "$WORKDIR$HTMLFILE"
mkdir -p "$WORKDIR"
mkdir -p "$UNPDIR"

Далее под катом

Скрипт целиком

На PasteBin
На GitHub

Отображение картинок в консоли Linux

Задумался тут, можно ли показать изображение в консоли Linux без использования X-Server’а. Ведь в современных Линуксах консоль, по большей части, только маскируются под текстовую, а на самом деле, с определенного этапа загрузки ОС, она вполне себе графическая, и фреймбуфер у них есть, и все прочее для отображения картинки. Шрифты же она отображает, причем не как в DOS, где в консоли никакого графического режима по умолчанию нет, и единственный шрифт 80×25 для VGA-режима и 40×25 для EGA (о-о-о-чень старые мониторы и видеочипы), ЕМНИС.

В Linux наоборот, надо еще пошаманить, чтобы сэмулировать режим VGA в «голой» консоли без иксов. Если не шаманить, то наоборот, может получиться как-то так:


Мелко, противно, нихрена не видно

Справедливости ради, в DOS есть и графические режимы, и даже софт для отображения картинок, но, фактически отображение будет не совсем «в консоли», программа должна будет переключить видеоадаптер в графический режим, и там уже сама как-то справляться с изображениями.

Вернемся к Linux. Итак, консоль вполне себе графическая, так есть ли софт? Как выяснилось, есть.

Называется программа FIM. Программа небольшая, поддерживает основные форматы (BMP, GIF, JPEG, png, tiff) и некоторые другие (PPhotoCD, ppm, XWD), а для остальных она пытается использовать ImageMagick. Программа основана на Fbi (framebuffer imageviewer — это нечто вроде печально известного Vim, только для работы с изображениями в консоли).

В зависимости от того, где она была запущена, программа использует разные механизмы отображения графики:
— если она выполняется в эмуляторе терминала под иксами, то использует библиотеку SDL или imlib2. Впрочем, в иксах, лично у меня, fim смухлевал. В том же самом терминале рисовать не стал, а создал отдельное окно.
— если запущена в «голой» консоли без иксов, использует консольный фреймбуфер
— и, что довольно забавно, если попытаться запустить ее на терминале, который графику не поддерживает (например, через PuTTY), то программа преобразует изображение в ASCII-арт, ну тут уж, что называется, как получится.

Установка

Для Debian/Ubuntu и подобных им дистрибутивов есть готовый пакет, для Slackware пришлось собирать из исходников, впрочем, у меня собралось с первого раза.

Запуск

fim <имя файла 1> [имя файла 2] [имя файла 3...] — для просмотра одного или нескольких файлов.

fim -R <каталог>, например, fim -R ~/Pictures/ — для просмотра изображений в каталоге.

Основные клавиши

n — следующий файл
p — предыдущий
+ — увеличить
— уменьшить
r — поворот
m — отзеркалить
f — отзеркалить и перевернуть вверх ногами
q, ESC — выход

На самом деле у утилиты довольно много возможностей, есть командный режим, как у Vim, в котором изображение можно редактировать, подробное описание всех возможностей — в мануале на официальном сайте.

Скриншоты


Котик в «голой» консоли


А вот в иксах он смухлевал, хотя котика нарисовал


Псевдографический котик в текстовом терминале. Довольно ничего получилось.

Ссылки

Официальный сайт
Исходники Копия
Мой пакет для Slackware