• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Параллельное использование впн

Наоборот замечательно если публика разношёрстная, кому-то нравиться то кому-то другое...а по линуксу есть ещё ЛОР где придётся не то что линукс_VS_виндоуз отстаивать, дак придётся отстаивать конкретно взятый дистрибутив....но только не понятно к чему всё это
 
Немного автоматизации

Когда имеется несколько виртуальных машин с одинаковыми впн, то надоедает выполнять однотипные действия на всех машинах. А на фриопенвпн еще и 2 раза в день! Поэтому нужно свести порядок действий к минимуму и воспользуемся скриптовым языком автоит. Допустим, у нас есть три впн клиента, которые имеют одинаковую конфигурацию. Благо то, что openvpn способен управляться с консоли, например, есть команды для подключения и отключения конфигов. Нужно только дать эти команды с одной машины на три другие.

Рассмотрим клиентский скрипт, который будет слушать 33333 tcp порт на своем айпи адресе, и при получении данных произведет работу. Посмотрим на сам скрипт

#include <Process.au3>
Здесь мы считываем айпишник с ини файла
$ip = IniReadSection("ip.ini", "ip")
Открываем сокет
TCPStartup()
OnAutoItExitRegister("OnAutoItExit")
$iListenSocket = TCPListen($ip[1][1], 33333)
While True

Ждем данные на сокете
Do
$iSocket = TCPAccept($iListenSocket)
Sleep(100)
Until $iSocket <> -1
While True

Обрабатываем получение данные
$sData = TCPRecv($iSocket, 2048)
If error Then ExitLoop
$sData = BinaryToString($sData, 4)
If $sData Then _go()
Sleep(100)
WEnd
WEnd
Func _go()

Извлекаем из данных название конфига первые две буквы (у меня это uk, nl, us)
$country = StringLeft($sData, 2)
Остальные символы являются паролем и их нужно записать в файл login, что находится в папке с конфигом от openvpn
$pass = StringTrimLeft($sData, 2)
$file = FileOpen("C:\Users\pepsi\OpenVPN\config\login", 2)
FileWrite($file, "freeopenvpn" & crlf & $pass)
FileClose($file)
For $i = 1 To 2
If $i = 1 Then

Отключаем все конфиги
_RunDos('"C:\Program Files\OpenVPN\bin\openvpn-gui.exe" --command disconnect_all')
Sleep(10000)
EndIf

Подключаем данный конфиг
_RunDos('"C:\Program Files\OpenVPN\bin\openvpn-gui.exe" --connect ' & $country & '.ovpn --silent_connection 1')
Sleep(25000)

Если зеленые экранчик опенвпн клиента, то выходим с цикла
PixelSearch(680, 732, 895, 764, 0x72E672)
If Not error Then
ExitLoop
EndIf

Если экран желтый, то отключаем все конфиги и повторяем цикл подключения еще раз
PixelSearch(680, 732, 895, 764, 0xFFFF80)
If Not error Then
_RunDos('"C:\Program Files\OpenVPN\bin\openvpn-gui.exe" --command disconnect_all')
Sleep(25000)
EndIf
Next
EndFunc


Теперь рассмотрим сам конфиг опенвпн клиента, пример приведу на uk, там много лишнего записано, какие-то идентификаторы и прочие настройки, очистим их и получим

client dev tun dev-type tun remote 85.239.62.22 443 tcp-client remote-random nobind persist-tun cipher AES-128-CBC auth SHA1 verb 0 mute 0 push-peer-info remote-cert-tls server comp-lzo no auth-user-pass login key-direction 1

Разумеется, сертификаты не трогаем, их нету смысла редактировать. Важным тут является строка auth-user-pass login, которая указывает на файл с логином\паролем.

Теперь рассмотрим серверную часть программы

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>
TCPStartup()
OnAutoItExitRegister("_exit")
$ini = IniReadSection("vpnserv.ini", "pass")

Создаем соединения с клиентами
$iSocket1_1 = TCPConnect("192.168.100.8", "33333")
$iSocket1_2 = TCPConnect("192.168.100.9", "33333")
$iSocket1_3 = TCPConnect("192.168.100.10", "33333")
;~ $iSocket1_3 = TCPConnect("192.168.100.10", "33333"
)
Создаем гуи окно с элементами управления
GUICreate("", 270, 80, -1, -1)
$input = GUICtrlCreateInput($ini[1][1], 5, 5, 150, 35)
GUICtrlSetFont(-1, 12, 400, 1, "Comic Sans MS")
$go = GUICtrlCreateButton("go", 160, 5, 40, 35)

$nCh1_1 = GUICtrlCreateCheckbox("vpn 1.1", 2, 50, 62, 25, $BS_PUSHLIKE + $BS_ICON)
GUICtrlSetFont(-1, 12, 400, 1, "Comic Sans MS")
GUICtrlSetState($nCh1_1, Execute($ini[3][1]))

$nCh1_2 = GUICtrlCreateCheckbox("vpn 1.2", 70, 50, 62, 25, $BS_PUSHLIKE + $BS_ICON)
GUICtrlSetFont(-1, 12, 400, 1, "Comic Sans MS")
GUICtrlSetState(-1, Execute($ini[4][1]))

$nCh1_3 = GUICtrlCreateCheckbox("vpn 1.3", 140, 50, 62, 25, $BS_PUSHLIKE + $BS_ICON)
GUICtrlSetFont(-1, 12, 400, 1, "Comic Sans MS")
GUICtrlSetState(-1, Execute($ini[5][1]))

$nCh2 = GUICtrlCreateCheckbox("vpn2", 205, 50, 62, 25, $BS_PUSHLIKE + $BS_ICON)
GUICtrlSetFont(-1, 12, 400, 1, "Comic Sans MS")

$res = GUICtrlCreateButton("res", 210, 5, 40, 35)
GUICtrlSetState(-1, $GUI_disable)
GUISetState(@SW_SHOW)

If $ini[2][1] = "yes" then
IniWrite("vpnserv.ini", "pass", "go", "no")
_go()
endif

Основной цикл ожидающий действия
While True
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $go
_ini_checkbox()
IniWrite("vpnserv.ini", "pass", "go", "yes")
_res()
Case $res
_ini_checkbox()
_res()
EndSwitch
Wend

Функция сохранения чекбоксов после перезапуска программы
Func _ini_checkbox()
IniWrite("vpnserv.ini", "pass", "pass", GUICtrlRead($input))
If GUICtrlRead($nCh1_1) = $GUI_CHECKED Then
IniWrite("vpnserv.ini", "pass", "vpn1", "$GUI_CHECKED")
Else
IniWrite("vpnserv.ini", "pass", "vpn1", "$GUI_UNCHECKED")
EndIf
If GUICtrlRead($nCh1_2) = $GUI_CHECKED Then
IniWrite("vpnserv.ini", "pass", "vpn2", "$GUI_CHECKED")
Else
IniWrite("vpnserv.ini", "pass", "vpn2", "$GUI_UNCHECKED")
EndIf
If GUICtrlRead($nCh1_3) = $GUI_CHECKED Then
IniWrite("vpnserv.ini", "pass", "vpn3", "$GUI_CHECKED")
Else
IniWrite("vpnserv.ini", "pass", "vpn3", "$GUI_UNCHECKED")
EndIf
EndFunc

Функция рестарта
Func _res()
If Not StringInStr($CmdLineRaw, "/CmdLineRun") Then Run(@AutoItExe & ' "' & @ScriptFullPath & '"')
TCPShutdown()
Exit
EndFunc
Func _go()

Функция передачи данных клиентам
If GUICtrlRead($nCh1_1) = $GUI_CHECKED Then TCPSend($iSocket1_1, StringToBinary(GUICtrlRead($input), 4))
If GUICtrlRead($nCh1_2) = $GUI_CHECKED Then TCPSend($iSocket1_2, StringToBinary(GUICtrlRead($input), 4))
If GUICtrlRead($nCh1_3) = $GUI_CHECKED Then TCPSend($iSocket1_3, StringToBinary(GUICtrlRead($input), 4))
EndFunc
Func _exit()
_ini_checkbox()
TCPShutdown()
EndFunc


Полагаю, в коде пояснять нечего, все понятно без слов, единственное что стоит добавить, так это ини файл, содержимое его такое

[pass] pass=uk516416641 go=no vpn1=$GUI_CHECKED vpn2=$GUI_CHECKED vpn3=$GUI_CHECKED

Screenshot_15.png


Вводим пароль, выбираем впн, и запускаем скрипт кнопкой «go». Все данные программы сохраняются после закрытия.

Теперь посмотрим, откуда же берется пароль. К примеру с этого сайта (https://www.freeopenvpn.org/premium.php?cntid=UK&lang=en). Он очень насыщен рекламой, и привередлив к блокировщикам (не показывает пароль). Поэтому воспользуемся каскадными таблицами, напишем правила с помощью плагина stylish (для firefox)

.passchng,body > center:nth-child(8),body > div:nth-child(9) > h1:nth-child(1), html body center div div p.exclam,html body center div div p.attn_2, p.data:nth-child(1), p.data:nth-child(2), .attn_1 > span:nth-child(1),body > div:nth-child(7),body > hr:nth-child(4),body > hr:nth-child(6),.offer, body > div:nth-child(1) > center:nth-child(1),body > div:nth-child(5), body > div:nth-child(1),body > div:nth-child(2), body > div:nth-child(14), body > center:nth-child(13) > div:nth-child(1) {display: none !important;} #result > img:nth-child(1) {margin-left: -150px !important; margin-top: -80px !important;} body > div:nth-child(9),.adsbygoogle, body > center:nth-child(10) > div:nth-child(1) > div:nth-child(1), body > center:nth-child(10) > div:nth-child(1) > div:nth-child(3),body > center:nth-child(11) > div:nth-child(1) {margin-left: -4090px !important;}

После таких манипуляций останется только капча. Для удобства уменьшим размер сайта, и он примет вот такую форму

Screenshot_16.png


Данные в скрипте корректируются в зависимости от разрешения экрана, так как существует поиск цвета по координатам в клиентском скрипте.
 
Последнее редактирование:


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх