Этот файл в удобном для просмотра виде можно найти на github
- шлюз дает возможность писать собственные скрипты на любом языке и уходит от ограничений IE для javascript.
- Т.к. mobilebalance меньше дергает IE, он меньше подвисает и падает.
- Для ряда операторов используется движок браузера chrome или родственных ему на chromium, для получения информации о балансе, но взаимодействие с ним вынесено за пределы процесса Mobilebalance? так что не приводит к накоплению ошибок и утечкам памяти.
- Можно сохранять сессии, т.е. на каждый телефон tele2 у вас будет своя сессия с сохраненными куками.
- Все собрано таким образом, чтобы не оказывать никакого влияния на установленные программы, в т.ч. если установлен python другой версии.
- Есть два варианта использования вызов через DLL - dllplugin плагин и вызов через локальный веб-сервер jsmblhplugin.
- jsmbLh и DLL плагины это всего-лишь обертка, которая внутри вызывает одни и те же плагины
- Т.к. у версии dllplugin обнаружился недостаток в виде того что MobileBalance принимает из dllplugin ограниченное количество параметров, то в настоящий момент приоритетной является версия с веб-сервером - jsmblhplugin, хотя если вам нужен только баланс и какие-то базовые вещи, то никто не мешает использовать и dllplugin.
- Свежую версию сборки можно найти в releases в моем репозитории на github или в форуме на 4pda посвященном MobileBalance.
- Распаковать свежую версию сборки в папку где установлен MobileBalance (точнее, где находятся файлы Options.ini, phones.ini, BalanceHistory.mdb если в папке MobileBalance.exe есть, а указанных файлов нет, то пробуйте поискать в папке например вместо C:\Program Files (x86)\Mobilebalance посмотрите в папке %localappdata%\VirtualStore\Program Files (x86)\Mobilebalance или просто поищите по диску в какой папке у вас находится phones.ini и другие файлы).
- Запустить из папки mbplugin setup_and_check.bat (он пересобирет плагины, поставит в автозагрузку веб-сервер и проверит работу тестовым плагином). Бывает, что он в процессе выдает ошибки, но при этом отрабатывает нормально. Так что если были сообщения об ошибке, то можно их проигнорировать и попробовать работу программы, или при желании можно запустить setup_and_check.bat повторно и посмотреть на результат.
- Подключить нужные плагины из папки mbplugin\jsmblhplugin
- Можно пользоваться.
Записал несколько видео о том как настраивать, кому-то по видео возможно будет проще
Видеоинструкция сильно устарела, так что возможны нестыковки, но общие принципы позволяет понять
DLL плагины работают без web-сервера, но для получения всех параметров, например остатков интернета придется использовать jsmbLH плагины (они в папке jsmblhplugin)
Для jsmbLH плагинов нужен веб-сервер (запускается mbplugin\run_webserver.bat), а кроме этого если включить режим записи в БД, то через web сервер становиться доступен просмотр отчетов по телефонам, полученным через mbplugin report, это ссылку также можно открыть через иконку web-сервера в системном трее.
Отчет также можно открыть как html файл, по умолчанию он находится в папке mbplugin\DB\balance.html, при желании это можно поменять через параметр balance_html в mbplugin.ini
Все плагины (простые и через браузер) в использовании одинаковы независимо от задействованного внутреннего механизма
Этот вид плагинов использует для работы получение данных по конкретным url адресам и не требует больших ресурсов для работы, но требует больших усилий по разработке и в ряде случаев запредельную сложность реализации
Этот вид плагинов использует для получения баланса запуск скрытого браузера, такие плагины значительно легче разрабатывать, но т.к. для запуска браузера требуется больше ресурсов этот вариант немного тяжелее простых плагинов для системы.
В качестве браузера может быть выбран один из вариантов Chromium, Firefox или WebKit (чтобы уменьшить размер трафика при установке по умолчанию скачивается только Chromium)
Сокрытие окна браузера с экрана может осуществляться как средствами ОС (параметр show_chrome) так и включением специального режима headless (headless_chrome)
Запуск браузера может осуществляться в трех вариантах в зависимости от настроек в mbplugin.ini:
show_chrome = 1 и headless_chrome = 0 - браузер показывается все время.
show_chrome = 0 и headless_chrome = 0 - браузер скрывается с экрана, но в момент запуска кратковременно появляется в панели задач. В случае появления капчи может быть отображен. Скрытие браузера в этом режиме работает только на платформе Windows
show_chrome = 0 и headless_chrome = 1 - браузер запускается в скрытом режиме, никак во время работы визуально себя не проявляет, в случае появления капчи не может быть отображен. С некоторыми плагинами не может работать в таком режиме при использовании движка хрома.
Телеграм бот
Запись в базу sqlite
Импорт данных из mdb базы mobilebalanse в БД sqlite
Просмотр балансов в браузере (как в MobileBalance) и генерация отчета в виде html странички
В перспективе есть планы, чтобы mbplugin работал как самостоятельное приложение
Полный список настроек смотри в mbplugin_ini.md
Архив должен был распакован в папку где расположен MobileBalance, при первом запуске (setup_and_check.bat) в папке, где находится mobilebalance.exe будет создан mbplugin.ini с дефолтовыми минимальными настройками (по умолчанию все доп фишки выключены):
- mts_usedbyme = 0 - спецвариант по просьбе Mr. Silver в котором возвращается не остаток интернета, а использованный, 0 - показывать оставшийся трафик (NonUsed) по всем, 1 - показывать использованный трафик (usedByMe) по всем, или список тел, через запятую - показать использованный только для этих списка телефонов
- sqlitestore = 1 - запись запросов в sqlite БД, причем пишутся все поля, например те же SMS, которые не принимает MobileBalance через DLL, sqlite БД по умолчанию находится в папке mobilebalance
- createhtmlreport = 1 (требуется включенный sqlitestore = 1)- после каждого вызова mbplugin создавать файл с отчетом, сходный с html страничкой, которую mobilebalance умеет отдавать в виде html. Список полей в отчете можно поменять в переменной table_format, только не трогайте на первых двух местах PhoneNumber,Operator, иначе сломается. Пока не придумал как по другому.
Местоположение отчета по умолчанию - в папке mbplugin\db\balance.html, если хотите в другое место - меняйте параметр balance_html Если выставить sqlitestore = 1 и createhtmlreport = 1, то после каждого получения баланса будет генерироваться файл db\balance.html максимально близкий по виду к файлу, который генерирует MobileBalance, но только по тем телефонам, баланс которых мы получаем через mbplugin. Также все данные получаемые через mbplugin сохраняются в базу SQLITE схожей структуры с BalanceHistory.mdb. Данная возможность позволяет видеть те поля, которые не принимает MobileBalance из DLL плагинов, например количество SMS.
- updatefrommdb = 1 - Импорт данных из BalanceHistory.mdb после каждого запроса, требует установленного ODBC драйвера и включенного sqlitestore = 1, для интеграции с базой MDB необходимо установить 32-битный ODBC драйвер для MDB AccessDatabaseEngine.exe Скачать можно отсюда. Для первоначального полного импорта используйте plugin\copy_alldata_from_mdb.bat Замечание для пользователей автономной версии, импортировать данные можно и в ней (положив mdb файл в ту же папку, где лежит sqlite файл), но для этого нужно на время импорта добавить параметр updatefrommdb = 1, а после импорта или выключить или убрать.
- show_tray_icon - показывать иконку в трее - 1 прятать - 0, (по умолчанию 1)
- show_chrome - Прятать окна Chrome (при logginglevel=DEBUG всегда показывает)
- show_captcha - При определении что в браузере сработала капча скрытое окно хрома будет показано (не сработает в режиме headless)
- [Telegram] секция с настройками для телеграм бота (подробное описание в секции про телеграм)
- [HttpServer] - Секция с настройками web сервер порт сервера, доступ к серверу по сети, и список полей в отчете
- Для использования этих возможностей убедитесь, что в файле mbplugin.ini в разделе [MobileBalance] параметр path указывает на папку где находится mobilebalance.exe. Если вы распаковали архив в подпапку в папке с MobileBalance, то path должен настроиться автоматически.
В папке mbplugin\log ведется журнал работы mbplugin
Запустите mbplugin\setup_and_check.bat он пересоберет плагины, настроит автозапуск web сервера для jsmbLH плагинов и проверит работу плагинов запуском обоих вариантов тестового плагина.
Склонировать репозиторий c github (обновления можно так же будет накатывать через git pull)
Для сборки под windows понадобиться curl.exe и 7z.exe, в linux и MacOS сборка не требуется, достаточно установить python >3.6 склонировать репозиторий и установить пакеты
git clone https://github.com/artyl/mbplugin
зайти в папку mbplugin
build clean
build build
tkinter для python, если нужен ввод капчи для python к сожалению автоматом поставить не получиться, нашел только такой способ
Сборка всех DLL: dllsource\compile_all_p.bat
После этого все DLL будут находиться в папке mbplugin\dllplugin
Если есть желание использовать свой питон, тогда можно поменять вызов в mbplugin\plugin\mbplugin.bat
Теперь есть два варианта использования jsmblh plugin (jsmb localhost) приоритетный вариант и старый вариант dllplugin jsmblh plugin мы подключаем из папки mbplugin\jsmblhplugin dllplugin из папки mbplugin\dllplugin
Для использования добавить в автозагрузку mbplugin\run_webserver.bat и подключить нужный плагин из папки mbplugin\jsmblhplugin
Вызов осуществляется через jsmb плагин, передающий параметры в webserver, который в свою очередь уже вызывает сам плагин. Плюсы - получаем все поля, которые могли использовать в jsmb плагинах, минусы - необходимо запускать webserver, также в этой схеме больше участия IE, и возможно глюков от замусоренного кэша IE будет больше.
!ВАЖНО! Не забывайте, что для работы jsmblhplugin должен быть запущен web server mbplugin\run_webserver.bat (при запущенном webserver появляется иконка в трее)
Для использования в MobileBalance подключить нужный dll плагин из папки mbplugin\dllplugin
Вызов плагина осуществляется через вызов DLL, плюс - минимальное участие IE, минус MB не все поля принимает обратно
Пути, жестко прописываются в DLL, в готовой сборке они смотрят в C:\mbplugin, если ваша папка отличается от этой, то запустите dllsource\compile_all_p.bat
Подключить DLL для нужных провайдеров (Настройки\Плагины\Операторы Добавить и выбрать DLL для нужных операторов)
В настройках для соответствующего телефона выбрать провайдера соответствующей DLL
!ВАЖНО! Dll plugin привязан к той папке, куда настроен, если вы хотите переместить папку mbplugin в другое место, то после перемещения ОБЯЗАТЕЛЬНО запустите mbplugin\setup_and_check.bat
Т.к. используется самостоятельный движок chromium и другие, то в ряде случаев старые версии движков могут накапливаться. Хотя документация к playwright уверяет что этого происходить не должно. Проверить это можно заглянув в папку %userprofile%\AppData\Local\ms-playwright
Если на python, то это файл с функцией get_balance(login, password, storename, **kwargs) storename это строка, используемая как ключ для хранения сессии. Формируется как имя плагина + login Функция возвращает результат в виде словаря. Можно посмотреть как сделаны другие плагины, также есть простые тестовые. После того как плагин будет готов запускаем C:\mbplugin\setup_and_check.bat и будут пересобраны DLL и jsmbLH для всех имеющихся в папке C:\mbplugin\plugin плагинов. Подключаем полученный jsmbLH или DLL плагин в MobileBalance и используем его для получения баланса, не забывайте что для jsmbLH нужен запущенный веб-сервер.
На компьютере работает веб-сервер (по умолчанию на 19777 порту, который принимает обращения из пустышек-jsmbLH плагинов и реализует обращение к самим плагинам). Работа самих плагинов не зависит от того, кто их вызвал DLLplugin или jsmbLH плагин
ВАЖНО! DLL собраны 32-битным компилятором, и вызываться должны из 32-битного приложения. 32-битную DLL вызвать из 64-битного приложения нельзя!
Mobilebalance вызывает DLL, передавая ей логин и пароль через xml строку
В самой DLL никакого функционала нет, она служит лишь оберткой для передачи вызова в mbplugin\plugin\mbplugin.bat
DLL вызывает mbplugin\plugin\mbplugin.bat, передавая ему имя плагина в качестве параметра, а переданный XML через переменную окружения RequestVariable
mbplugin.bat вызывает mbplugin.py, в котором вызывается соответствующий python плагин.
mbplugin.bat возвращает результат через stdout.
Данные по параметрам вызова DLL были получены с помощью реверса существующего DLL плагина.
Я постарался сделать все так, чтобы все можно было собрать за 10 минут, не устанавливая 10 гигабайтные компиляторы, минималистичная DLL весь код вынесен в скрипты.
Конечно DLL можно собрать и на vc и gpp и на Delphi и много на чем еще,
но для этого нужно много возни с установкой среды, в моем варианте все можно собрать с нуля за 10 минут, скачав несколько десятков мегабайт.
Количество кода для DLL минимум, чтобы любой желающий мог без труда убедится что в нем нет закладок.
Остальной код на скриптах, и его можно проверить в любой момент. C я знаю не очень хорошо, поэтому единственный простой способ передать request я нашел через переменную окружения, а возврат осуществляется через поток вывода. Пути в папке mbplugin внутри DLL приходится прописывать абсолютными, потому что из DLL выяснить, по какому пути она находится, оказалось очень нетривиальной задачей, даже имя DLL узнать очень непросто. В принципе это проблема небольшая, на tcc все пересоберается за пару секунд. Хотел сохранить настройки для путей в реестре, но из реестра прочитать оказалось тоже не просто. В результате у меня получилось сделать только так, код на C получился не очень хороший, но работоспособный. Если кто в состоянии причесать сишный код, буду признателен. Вызов bat файла, а не напрямую скрипта python, сделан для того, чтобы если будет желание отвязаться от python, с минимумом изменений в остальном коде.
Т.к. в запросе передается только логин и пароль, то нам приходится сделать по отдельной DLL для каждого сервиса. Чтобы оставить задел на будущее, я для плагинов добавил еще префиксы, для питона это p_ Таким образом, мы генерируем dll по следующему принципу: Для python плагина tele2 - файл плагина tele2.py tele2 - имя модуля на python, который получает баланс p_tele2.dll - dll которую мы подключаем в mobilebalance
В процессе эксплуатации выяснилось, что mobilebalance, оказывается, все поля принимает из результата возвращенного DLLplugin, как оказалось, например не понимает остаток SMS, Список принимаемых полей достаточно короткий:
- Balance
- Expired
- Min
- Internet
- TarifPlan
- BlockStatus
- AnyString
Все, кроме этого, будет проигнорировано
Несмотря на то, что, на первый взгляд, это все идет не через браузер, mobilebalance все равно перед стартом DLL дергает движок IE (res://ieframe.dll/navcancl.htm и about:blank) - это видно по логу и появлению файлов в папке кэша IE, так что не исключаю, что часть каких-то глюков может по-прежнему лечиться чисткой кэша браузера, хотя это и маловероятно.
ВАЖНО. В xml который возвращает плагин поля case sensitive, так что если будет balance вместо Balance, MB будет писать что баланс равен нулю.
--- Структура request который приходит из mobilebalance через переменную окружения ----------
<?xml version="1.0" encoding="windows-1251" ?>
<Request>
<ParentWindow>007F09DA</ParentWindow>
<Login>loginlogin</Login>
<Password>password123456</Password>
</Request>
---- В mobilebalance уходит xml через вывод на экран -------------
<Response><Balance>123</Balance></Response>