Комментарии 11
интересно, но в Китае оно не работает
Дай тебе Бог здоровья, добрый человек :)
Я так в первом классе писал
А зачем такие сложности?
Они же в Твиттере есть. Там все по старому осталось.
Они же в Твиттере есть. Там все по старому осталось.
Может кто посоветует аналогичные сервисы? Имею ввиду VPNBook
Автор капчи (VPNBook) не учел, что «u» и «y» у него сольются в идентичный символ. Пользователи просто не смогут распознать «y» в обрезанном символе «u».
Костыль для обхода проблемы, вставить в блок "// ищем символы по словарю":
Костыль для обхода проблемы, вставить в блок "// ищем символы по словарю":
$tempchar = $hashDict[$hashStr];
if ($tempchar=='u' || $tempchar=='y') // проблема совпадения символов
$tempchar = (mt_rand(0, 1))? 'u': 'y';
//$tempchar = (time() / 60 % 60 % 2)? 'u': 'y';
elseif ($tempchar==' ') break;
Недавно заблокировали сайт vpnbook, теперь нельзя автоматически получить пароль, но vpn сервера работают. Обход проблемы: парсить fb или twitter
PHP парсер пароля из fb:
PHP парсер пароля из fb:
<?php
function url_get_html($url) {
// инициализируем cURL
$ch = curl_init();
// устанавливаем url с которого будем получать данные
curl_setopt($ch, CURLOPT_URL, $url);
// curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'cURL');
// устанавливаем опцию чтобы содержимое вернулось нам в string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// выполняем запрос
$output = curl_exec($ch);
// закрываем cURL
curl_close($ch);
// возвращаем содержимое
return $output;
}
$homepage = url_get_html('https://mbasic.facebook.com/VPNBookNews/');
preg_match('/Password: ([^<]+)/', $homepage, $matches);
// var_dump($matches);
print($matches[1])
// print_r($matches);
?>
Автору спасибо за идею!
Немного модифицировал скрипт, теперь он работает как сервис, не делает запись в файл, а только в переменные.
Необходимо добавить в шедулер запуск скрипта VPNBook_watchdog_script
Скрипт для MikroTik
# VPNBookScript v2.5
local scriptName "VPNBook_watchdog_script";
:global VPNBookpIfName "pptp-VPNBook"
:global VPNBookServerAddresses {"PL226.vpnbook.com";"de4.vpnbook.com";"us1.vpnbook.com";"us2.vpnbook.com";"fr1.vpnbook.com";"fr8.vpnbook.com";"ca222.vpnbook.com";"ca198.vpnbook.com"}
#:if ([:typeof $VPNBookServerAddresses] != "array") do={
# :set VPNBookServerAddresses {"euro217.vpnbook.com";"euro214.vpnbook.com";"us1.vpnbook.com";"us2.vpnbook.com";"ca1.vpnbook.com";"de233.vpnbook.com"}
#}
:global VPNBookErr false
:global VPNBookPass
:global VPNBookRun
:global VPNBookURL https://myservername/vpnbook
#:global TToken "4.....................2"
#:global TChatId "2342432...9"
if ( [len [/system script job find where script=$scriptName]] > 1) do= { error "single instance" };
delay 15;
while (true) do {
:delay 60s;
:global VPNBookServerIndex
:if ([:typeof $VPNBookServerIndex] != "num") do={:set VPNBookServerIndex 0}
:if ([/interface pptp-client get $VPNBookpIfName running]) do={
:set VPNBookRun true
} else {
:if (!$VPNBookRun) do={
:set VPNBookServerIndex ($VPNBookServerIndex + 1)
:if ($VPNBookServerIndex>=[:len $VPNBookServerAddresses]) do={:set VPNBookServerIndex 0}
} else {
:set VPNBookRun false
}
:if (![/interface pptp-client get $VPNBookpIfName disabled]) do={/interface pptp-client set $VPNBookpIfName disabled=yes}
:delay 2
:do {:set VPNBookPass ([/tool fetch url="$VPNBookURL" output=user as-value]->"data")} on-error={:set VPNBookErr true}
:if (!$VPNBookErr) do={
:if ([/interface pptp-client get $VPNBookpIfName password] != $VPNBookPass) do={/interface pptp-client set $VPNBookpIfName password=$VPNBookPass}
:if ([/interface pptp-client get $VPNBookpIfName connect-to] != $VPNBookServerAddresses->$VPNBookServerIndex) do={/interface pptp-client set $VPNBookpIfName connect-to=($VPNBookServerAddresses->$VPNBookServerIndex)}
:log info ("VPNBook: Attempt to connect to: ".($VPNBookServerAddresses->$VPNBookServerIndex).". Password: $VPNBookPass")
# /tool fetch url=("https://api.telegram.org/bot$TToken/sendmessage\?chat_id=$TChatId&text=VPNBook: Attempt to connect to: ".($VPNBookServerAddresses->$VPNBookServerIndex).". Password: $VPNBookPass") keep-result=no
/interface pptp-client set $VPNBookpIfName disabled=no
}
}
}
На своём ресурсе запускаю bash скрипт как cgi приложение
нашёл скрипт здесь и немного модифицировал (в Apache конфиг домена добавил вот эту строку:
ScriptAlias /vpnbook /var/www/html/vpnbook/password_extractor.sh
)
#!/bin/sh
# Begin functions
# Print out the help
__usage(){
echo "usage: password_extractor [-o output_file | [-h]]"
}
__extract_pwd(){
local file="$@"
local pwd=$(cat ${output_file} \
| grep -Eo '"WordText":.*?[^\\]",' \
| awk -F':' '{print $2}' \
| awk -F',' '{print $1}' \
| awk '{ gsub(/^[ \t]+|[ \t]+$/, ""); print }' \
| tr -d \")
echo ${pwd##*|}
}
# End functions
debug_flag=0
vpnbook_folder=$HOME/.vpnbook
vpnbook_base_url=https://www.vpnbook.com
vpnbook_url=${vpnbook_base_url}/freevpn
tesseract_service_url=https://api.ocr.space/parse/image
timestamp=$(date +%s)
output_file=/tmp/vpnbok_pwd_${timestamp}.json
log_file=/tmp/vpnbok_pwd_${timestamp}.log
# Start Script
while [ "$1" != "" ]; do
case $1 in
-o | --output ) shift
output_file=$1
;;
-d | --debug ) shift
debug_flag=1
;;
-h | --help ) usage
exit
;;
* ) usage
exit 1
esac
shift
done
echo "Content-type:text/plain"
echo ""
# Retrieve the Password URL from the official webpage
pwd_url=$(curl -s ${vpnbook_url} | grep -m2 "Password:" | tail -n1 | cut -d \" -f2)
#echo "Retrieving Password at the following URL: ${vpnbook_base_url}/${pwd_url}"
curl -X POST --header "apikey: 5a64d478-9c89-43d8-88e3-c65de9999580" \
-F "url=${vpnbook_base_url}/${pwd_url}" \
-F 'language=eng' \
-F 'isOverlayRequired=true' \
-F 'FileType=.Auto' \
-F 'IsCreateSearchablePDF=false' \
-F 'isSearchablePdfHideTextLayer=true' \
-F 'scale=true' \
-F 'detectOrientation=false' \
-F 'isTable=false' \
${tesseract_service_url} -o ${output_file}
pwd=$(__extract_pwd ${output_file})
echo ${pwd} > ${output_file}
#echo 'Retrieved password:---'${pwd}'---'
#echo "${pwd}"
tr -d "\n\r" < ${output_file}
exit 0;
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Почти OCR для получения пароля VPNBook. PHP + Mikrotik