Будучи счастливым обладателем роутера Mikrotik задался рядом частных задач, блокировкой определенных доменов..
В какой-то момент времени познакомился с замечательным проектом https://stopad.cgood.ru/, который выполняет одну-единственную функцию — генерирует скрипт для маршрутизаторов MikroTik Router OS), импортируя который, производится блокировка "рекламных" (и не только) доменов. (далее по тексту - "ДОМЕНОВ", на основании как публичных, так и указанных вами хост-листов.
Вашему вниманию: проект -= MikrotikBLParse =-
Код: Выделить всё
##################################################################################
# ~~~~ #
# -= MikrotikBLParse =- #
# -=(c) LitleKinder SoftWare (c) CopyRight 1998-2019 =- #
# Email: [email protected] #
# ~~~~ #
##################################################################################
1. Идея:
В какой-то момент времени познакомился с замечательным проектом https://stopad.cgood.ru/
Который выполняет одну-единственную функцию — генерирует скрипт для маршрутизаторов MikroTik
Router OS), импортируя который, производится блокировка "рекламных" (и не только) доменов
(далее по тексту - "ДОМЕНОВ", на основании как публичных, так и указанных вами хост-листов.
Скрипт, предоставленный автором проекта (у меня лично) работает через раз. В этой связи я решил
оптимизировать, дописать, условершенствовать механихм парсинга, и механизм создания скриптов для
блокировки "ДОМЕНОВ"...
Чего нет в MikroTik StopAD, и что есть в MikrotikBLParse.
* скрипт файл генерирутеся по любому колличеству "ДОМЕНОВ";
* предусмотрено разделение списка "ДОМЕНОВ" по колличеству записей, 5-10-20тыс;
* предусмотрена очистка консоли (в роутере Mikrotik)по окончанию работы скрипта;
* предусмотрены паузы при загрузке скрипта (в роутере Mikrotik);
* предусмотрено сохранение настроек программы (в ini файл);
2. Назначение:
Созадние скрипта блокировки "ДОМЕНОВ", вида.
{
/ip dns static
add address=127.0.0.1 name=101com.com comment=My_...;
add address=127.0.0.1 name=101order.com comment=My_...;
3. Принцип работы:
После первого запуска программа создает файл MikrotikBlackList.ini. в директории Sys.
в котором необходимо (прописать все настройки) в трех разных категориях:
[WEB Link]
[Checked Link]
[Script]
По умолчанию категрии получают значения:
[WEB Link]
Pase WEB Link_01 = http://winhelp2002.mvps.org/hosts.txt
Pase WEB Link_02 =
.........................................................
Pase WEB Link_05 =
[Checked Link]
Check_00 = No
......................
Check_19 = No
[Script]
Script_File_Name = Stop_AD_
Script_File_Ext = script
Script_Size = 10000
Script_Delay = 5
Script_Ext_Small = No
Script_Comm_Pref = My_BlackList
Script_Comm_Suff = ADBlock
Host_Name = 127.0.0.1
Чуть подробней, о каждой строке в Ini файле:
Pase WEB Link_01 = {ВЕБ ссылка для парсинга, может быть любая}
Pase WEB Link_02 = {ВЕБ ссылка для парсинга, может быть любая}
Pase WEB Link_03 = {ВЕБ ссылка для парсинга, может быть любая}
Pase WEB Link_04 = {ВЕБ ссылка для парсинга, может быть любая}
Pase WEB Link_05 = {ВЕБ ссылка для парсинга, может быть любая}
Check_00 = No {Парсить ВЕБ ссылки, предлагаемые по умолчанию}
......................
Check_19 = No {Парсить ВЕБ ссылки, предлагаемые по умолчанию}
Ссылки, определены по умолчанию и будут отображаться при наведении курсора на чекбоксы
в главном окне программы.
Script_File_Name = {Имя файла скрипта, который будет создан по окончанию работы программы}
Script_File_Ext = {Расширение файла скрипта, будет создан по окончанию работы программы}
Script_Size = {Колличество строк в каждом скрипте *}
Script_Delay = {Задержка перед загрузкой файла скрипта **}
Script_Ext_Small = {Не создавать комментарии в файлах скриптов}
Script_Comm_Pref = {Комментарий к блокировке - префикс ***}
Script_Comm_Suff = {Комментарий к блокировке - суффикс ***}
Host_Name = {Куда заворачивать весь блокируемый контент *****}
3. С чего начать:
После запуска программы необходимо отметить чекбоксы, (по ссылкам, которых) мы хотим получить спи-
сок "ДОМЕНОВ" к блокировке. Пример, чекбокс (ADS), результам станет загрука доменов по ссылке:
https://blocklist.site/app/dl/ads
Пример, чекбокс (ADS + SPAM), результам станет загрука "ДОМЕНОВ" по ссылкам:
https://blocklist.site/app/dl/ads
https://blocklist.site/app/dl/spam
Если выбрать (отметить) чекбокс {my from Ini}, то парсинг будет производится по всем ссылкам,
определенным блоком [WEB Link] в Ini файле. Значения будут браться из параметров
Pase WEB Link_01...05, при условии, что они определены Вами.
Далее, запуск парсинга - кнопка {START}.
В диалоговом окне {LOG} отобразится процесс парсинга, и возможные ошибки. В результате, парсинга,
будут скачаны все списки по выбранным ранее ВЕБ ссылкам в директорию .\Tmp. После этого программа
проанализирует все скаченные "ДОМЕНЫ" на предмет повторяемости (дубли) и удалит их. Результаты
будут записаны в деректорию .\Rez. Создаваемые файлы будут иметь вид:
.\Rez\{текущаядата+текущеевремя}\{Script_File_Name}+{Script_File_Ext}
Пример парсинга чекбокса {youtube}. Парсится ссылка {https://blocklist.site/app/dl/youtube}:
.\Rez\05.06.19(13.20.34)\Stop_AD_0001.script
со следующим содержимым:
## Script generated 05.06.19 13:20:34
## Script format: routeros
##
## Hosts list sources:
## >
## > https://blocklist.site/app/dl/youtube
##
## Excluded hosts:
## > localhost
## Begin Script
{
/ip dns static
add address=127.0.0.1 name=r3---sn-o097znlk.googlevideo.com comment=My_...;
add address=127.0.0.1 name=r5---sn-n4v7knlk.googlevideo.com comment=My_...;
add address=127.0.0.1 name=r5---sn-n4v7sn7y.googlevideo.com comment=My_...;
add address=127.0.0.1 name=r5---sn-vgqskned.googlevideo.com comment=My_...;
add address=127.0.0.1 name=r6---sn-o097znl6.googlevideo.com comment=My_...;
...........................................................................
ВСЕГО 213 ссылок на 05/06/2019
...........................................................................
add address=127.0.0.1 name=r6---sn-n4v7sn7l.googlevideo.com comment=My_...;
/system logging action set memory memory-lines=1;
/system logging action set memory memory-lines=65000;
:log info "";
:log info ">> Complete load file: Stop_AD_0001.script";
:log info ">> Please wait 5sec...";
:log info "";
}
## End Script
.\Rez\05.06.19(13.20.34)\Stop_AD_Main.script
со следующим содержимым:
##
## Script generated 05.06.19 13:20:34
## Script format: routeros
##
## Main script
## Plese copy and paste this text in Script, and run it...
## Begin Script
{
/ip dns static remove [/ip dns static find comment=My_BlackList_ADBlock];
/system logging action set memory memory-lines=1;
/system logging action set memory memory-lines=65000;
:log info "";
:log info ">> Please wait 5 sec...";
:delay 5s;
/import file-name=Stop_AD_0001.script;
:delay 5s;
/file remove Stop_AD_0001.script;
}
## End Script
То есть будут созданы два файла. Имена которых определены переменной {Script_File_Name}, с рас-
рением, определенным переменной {Script_File_Ext}. В первом находится готовый скрипт, который
нужно загрузить в роутер Mikrotik, посредством WinBox. Помимо имени, определнного вышеуказанными
переменными, файл содержит индекс, в данном случае {0001}. Таким образом полное имя файла формир-
ется в виде: {Script_File_Name} + {Index} . {Script_File_Ext}.
Пример:
Stop_AD_0001.script
...................
Stop_AD_0253.script
*Что такое индекс? Вернемся к настройке {Script_Size} {Колличество строк в каждом скрипте} Предпо-
ложим {Script_Size} имеет значение 10 000 (по умолчанию). В результате парсинга, выбранных ссылок,
будет скачано 55 000 доменов. Программа сформирует и разобьет все скаченные спсики доменов на 6
файлов. 55 000 / 10 000 = 5,5. Первый файл получит имя: Stop_AD_0001, второй Stop_AD_0002.
И так далее. Зачем разбивать на файлы с заданным {Script_Size}, колличеством списков "ДОМЕНОВ" для
блокировки. Разбивка производится с одной единственной целью, во время загрузки скриптов не сильно
нагружать роутер.
Теперь вернемся к "головному" файлу, который вместо индеса имеет корень {MAIN}. При установках по
умолчанию его имя будет: Stop_AD_Main.script. Даннй файл необходим для загрузки всех сгенерирован-
ных файлов списков "ДОМЕНОВ". Ниже по тексту, примерный листинг данного файла:
{
/ip dns static remove [/ip dns static find comment=My_BlackList_ADBlock];
/system logging action set memory memory-lines=1;
/system logging action set memory memory-lines=65000;
:log info "";
:log info ">> Please wait 5 sec...";
:delay 5s;
/import file-name=Stop_AD_0001.script;
:delay 5s;
/file remove Stop_AD_0001.script;
/import file-name=Stop_AD_0001.script;
:delay 5s;
/file remove Stop_AD_0001.script;
}
В первых строках строках очищается консоль, далее пауза, импорт первого файла. Удаление первого
файла, пауза, импорт второго файла и так далее...
**Зачем нужны паузы перед загрузкой скрипта? Опять таки, для уменьшения нагрузки на роутер во время
загрузки файлов скриптов Stop_AD_0001.script, Stop_AD_0001.script, Stop_AD_0.. Напомню, пауза опре-
деляется переменной {Script_Delay}{ в сек}. В самом скрипте, это выглядит {:delay 5s;}
По кончании работы программы, будет предложено удалить две директории:
.\Trs
.\Tmp
В первой директории (.\Trs)содержатся два файла:
.\Trs\MikrotikBlackList_Add_{CurrentData}
.\Trs\MikrotikBlackList_Del_{CurrentData}
Которые отображают логику работы программы. В первый файл заносится информации, о том какие
ссылки были добавлены. И причина добавления, пример:
{ INFO } Add string {galacticcentral.org} Reason for add this item: new WEB Link
Во втором, тоже, но по удаленным ссылкам, пример:
{ INFO } Removed string {} Reason for deleting this item: min lenght
Во второй директории (.\Tmp) содержатся все спарсенные файлы. Особой ценности не представляют, мо-
жно удалять.
4. Гарантии, лицензия, отказ от ответственности:
Программа поставляется на условиях 'КАК-ЕСТЬ', Тоесть я снимаю всякую ответственность за возможные
ошибки, содержащиеся в программе и последствия вызванные таковыми.
5. Если есть идеи:
Пишем на [email protected]
Описательная часть, (написана/описана) крайне быстро и скомкано, так как все делалось исключительно
под себя/для себя. Если будут вопросы и желание пообщаться, всегда к Вашим услугам - Telegramm,
Viber (+380675467603)
6. Известные проблемы:
Данная программа писалась и тестировалась на Win10 x64 (10.0.14393). Работоспособность на других
системах не гарантируется. Не запускать из папок, в которых содержится кириллица! Если программа не
запустится, то нужно зарегистрировать библиотеки:
.\Dll\comdlg32.ocx
.\Dll\Mscomctl.ocx
.\Dll\Msinet.ocx
.\Dll\Mswinsck.ocx
.\Dll\Tabctl32.ocx
Пример регистрации: regsvr32.exe /s comdlg32.ocx
7. Если Вам очень понравилось моя программа и есть желание отблагодарить:
Ни в коем случае не стоит пренебречь данным желанием;)
Яндекc Деньги: 410013190712045
WebMoney : R282691465680, Z330585249900
QiWi : +380675467603