Мониторинг работоспособности Хрумера или решаем проблему с «Утеряна связь с сервером Botmaster Labs»

Приветствую.

В этом материале я расскажу как мониторить работоспособность комплекса и рестартить его при в случае когда Хрумер пишет, что «Утеряна связь с сервером 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»”

Добавить комментарий

Ваш e-mail не будет опубликован.