Приветствую.
В этом материале я расскажу как мониторить работоспособность комплекса и рестартить его при в случае когда Хрумер пишет, что «Утеряна связь с сервером Botmaster Labs».
Как обычно немного теории.
Иногда бывает, что в процессе работы Хрумер теряет связь с сервером, а вот восстанавливать подключение он пока не умеет, что печально т.к. стопорится как рассылка так и распознавание капчей через XEvil (что логично т.к. авторизация проходит именно через него). Хотя это обещают поправить весьма скоро — но работать нужно уже сейчас, тем более настройка мониторинга займет не более 15 минут (но это неточно).
Соответственно, идея состоит в том, чтоб в определенный интервал времени запрашивать XEvil эталонным изображением, и если оно не совпадет, то ребутать обе программы. Немного покопавшись в API от rucaptcha.com я сформировал необходимые мне запросы, и протестировал их в Postman.
Любители видео могут посмотреть в видеоформате, а текстовая часть дальше
Первый запрос — это POST запрос на эндпоинт /in.php, содержащий в себе изображение закодированное в base64 и api ключ, необходимый для прохождения валидации в случае если эта опция включена на Xevil, и еще ряд параметров которые я просто взял из библиотеки. Если все прошло корректно, то в ответ XEvil отдаст «OK|номер капчи»
Второй запрос — это GET запрос на эндпоинт /res.php?key=123&action=get&id=(номер капчи из ответа на первый запрос), в ответ XEvil отдаст результат распознавания.
Собственно почти также работает и Рукапча, только на поддерживает больше опций
Как видно из примера я закодировал изображение со значением «553345», предварительно убедившись, что оно устойчиво распознается через Xevil.
Накидать скрипт было делом техники … однако прилично времени т.к. не хотелось привязываться к каким то языкам яля python, который пришлось бы ставить дополнительно, да и я его не знаю :)… короче после долгих раздумий, я остановился на PowerShell т.к. это нативный компонент Windows и должен работать в любой современной версии.
В итоге логика получилась такой — каждые 30 секунд скрипт посылает запрос на Xevil, если ответ отличается от эталона — то скрипт завершает процессы Xevil и Xrumer, через 3 секунды запускает их снова, давая при этом 60 секунд на запуск.
Код реализующий логику выглядит вот так:
#Если скрипт выдает ошибшку, то выполнить Set-ExecutionPolicy RemoteSigned #Для запуска нужен Net.4.5 и Powershell 4.0 # $XEVILaddress = "192.168.1.100" #ip адрес или хост с XEvil $Port = "80" #порт $CaptchaEtalon= '553345' #Эталонное значение капчи с которым будем сравнивать результать $sleep = 30 #с какой периодичностью проверять не отвалился ли Хрумер в секундах $reload = 60 #сколько времени даем Хрумеру на запуск while (1) { #Готовим POST запрос $PostParams = @{'method'='base64';'key'='123';'body'='iVBORw0KGgoAAAANSUhEUgAAADgAAAARAQMAAACy6/2jAAAABlBMVEX///8vXszQOSziAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAWklEQVQImWNgIADq7fvbDxj/YEgwkDiTUMwApIHoMwNDnjnDgcTNBQzFls2Nh41nMDA2HDiQZsADohPMf/AwJG44kGBgzMNgLDnjTILhDAY5fv72AwYfcFkDAAItG9w4px3OAAAAAElFTkSuQmCC';'ext'='png';'phrase'='0';'regsense'='0';'numeric'='0';'min_len'='0';'max_len'='8';'is_russian'='0'} #в body через base64 закодирована капча 553345 #шлем запрос и кладем его в переменную $WebResponse = Invoke-WebRequest -UseBasicParsing "http://$XEVILaddress/in.php" -Headers @{"Host"="$XEVILaddress";"ContentType"="application/x-www-form-urlencoded"} -Method POST -Body $PostParams #echo $WebResponse #echo $WebResponse.content # в нужной строке ответа находится не нужный кусок "ОК|", удалим его, а после ОК| находится ID капчи которую потом можно получить обычным GET $CaptchaID = $WebResponse.content.Remove(0,3) #Теперь запросим у XEvil результат распознавая тестовой капчи $GetCaptchaResult = Invoke-WebRequest -UseBasicParsing "http://$XEVILaddress/res.php?key=123&action=get&id=$CaptchaID" #Аналогично обрежен нужную часть $CaptchaResult = ''; $CaptchaResult = $GetCaptchaResult.content.Remove(0,3) #Сравним результат распознавания и эталон, если они не равны нужно перезапустить хрумер if ($CaptchaResult -ne $CaptchaEtalon) { echo "Connection broken reloading Xrumer" Stop-Process -Name "xpymep" Stop-Process -Name "XEvil" Start-Sleep -s 3 #Ждем 3 секунды и запускаем Start-Process -FilePath "xpymep.exe" Start-Process -FilePath "C:\Program Files (x86)\Botmaster Labs\XEvil\XEvil.exe" echo "Wait program to start" Start-Sleep -s $reload } else { clear echo "$(Get-Date) OK, sleeping for $sleep seconds" Start-Sleep -s $sleep } }
Код откоменчен по максимуму, так что проблем возникнуть не должно :
Далее я сохранил этот код в файл XrumerReload.ps1 и кинул в папку к Хрумеру, запускать его можно через cmd файл с таким содержанием
cd D:\Xrumer\ powershell.exe -File XrumerReload.ps1
Далее линк на этот файл я поместил в планировщик и теперь при старте компа у меня сразу запускается этот скрипт, который делает тестовый запрос, в ответ ему приходит тишина 🙂 и он сразу запускает Xevil и Хрумер и ставит их на мониторинг.
Код работает в любой версии Windows, но счастливым обладателям ламповой Windows 7 или ее серверной сестры Windows 2008R2 (а также Windows 8 и т.д.) необходимо установить Net.4.5 и обновить Powershell до 4.0 (т.к. только в нем появился метод Invoke-WebRequest).
Также скрипт при первом запуске скорее всего не запустится из за дефолтной политики запуска левых скриптов, отключить ее можно выполнив в PowerShell команду «Set-ExecutionPolicy RemoteSigned» и нажав «Y».
Надеюсь материал был полезным, спасибо за внимание.
1 thought on “Мониторинг работоспособности Хрумера или решаем проблему с «Утеряна связь с сервером Botmaster Labs»”