Mikrotik BlackList Parser (Mikrotik StopAD)

Описание каждой версии, обсуждение особенностей и недостатков
Ответить
kreotoDr
Сообщения: 21
Зарегистрирован: 31 мар 2018, 09:13

Всем привет!
Будучи счастливым обладателем роутера Mikrotik задался рядом частных задач, блокировкой определенных доменов..
В какой-то момент времени познакомился с замечательным проектом https://stopad.cgood.ru/, который выполняет одну-единственную функцию — генерирует скрипт для маршрутизаторов MikroTik Router OS), импортируя который, производится блокировка "рекламных" (и не только) доменов. (далее по тексту - "ДОМЕНОВ", на основании как публичных, так и указанных вами хост-листов.

Вашему вниманию: проект -= MikrotikBLParse =-

Код: Выделить всё


                 ##################################################################################
                 #                                    ~~~~                                        #
                 #                            -= MikrotikBLParse =-                               #
                 #           -=(c) LitleKinder SoftWare (c) CopyRight 1998-2019 =-                #
                 #                      Email:  oleksandr.nosar@gmail.com                         #
                 #                                    ~~~~                                        #
                 ##################################################################################

		   
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. Если есть идеи:
	Пишем на oleksandr.nosar@gmail.com
	Описательная часть, (написана/описана) крайне быстро и скомкано, так как все делалось исключительно
	под себя/для себя. Если будут вопросы  и  желание  пообщаться,  всегда к Вашим услугам  - 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
https://drive.google.com/open?id=1hK4Kj ... ouHXslir-S


ArtVAnt
Сообщения: 158
Зарегистрирован: 30 окт 2020, 15:00

Этот файл нельзя скачать, потому что он заражен вирусом (с) google
Изображение


ArtVAnt
Сообщения: 158
Зарегистрирован: 30 окт 2020, 15:00

как при добавлении записей днс скриптом избежать такой ошибки?
Скрипт останавливается если натыкается на
script error: failure: entry already exists
как сделать игнорирование таких ошибок?


ArtVAnt
Сообщения: 158
Зарегистрирован: 30 окт 2020, 15:00

Конкретно ошибка вот в этом скрипте, если адрес уже был добавлен из другого источника, то при спотыкании об уже существующий адрес выдается ошибка и скрипт останавливается. Нужно игнорирование данной ошибки или удаление существующего, добавление нового, например.

Код: Выделить всё

## StopAD - Script for blocking advertisements, based on your defined hosts files
## For changing any parameters, please, use this link: https://stopad.cgood.ru/
##
## @github    <https://github.com/tarampampam/mikrotik-hosts-parser>
## @version   4.3.0
##
## Setup this Policy for script: [X] Read [X] Write [X] Policy [X] Test

:local hostScriptUrl "https://stopad.cgood.ru/script/source?format=routeros&version=4.3.0&redirect_to=127.255.255.1&limit=12000&sources_urls=https%3A%2F%2Fcdn.jsdelivr.net%2Fgh%2Ftarampampam%2Fmikrotik-hosts-parser%40master%2F.hosts%2Fbasic.txt,https%3A%2F%2Fraw.githubusercontent.com%2Fcrazy-max%2FWindowsSpyBlocker%2Fmaster%2Fdata%2Fhosts%2Fspy.txt,https%3A%2F%2Fadaway.org%2Fhosts.txt,https%3A%2F%2Fwww.malwaredomainlist.com%2Fhostslist%2Fhosts.txt,https%3A%2F%2Fpgl.yoyo.org%2Fadservers%2Fserverlist.php%3Fhostformat%3Dhosts%26showintro%3D0%26mimetype%3Dplaintext,https%3A%2F%2Fsomeonewhocares.org%2Fhosts%2Fhosts,http%3A%2F%2Fwinhelp2002.mvps.org%2Fhosts.txt&excluded_hosts=localhost,localhost.localdomain,broadcasthost,local,ip6-localhost,ip6-loopback,ip6-localnet,ip6-mcastprefix,ip6-allnodes,ip6-allrouters,ip6-allhosts";
:local scriptName "stop_ad.script";
:local backupFileName "before_stopad";
:local logPrefix "[StopAD]";

do {
  /tool fetch check-certificate=no mode=https url=$hostScriptUrl dst-path=("./".$scriptName);
  :delay 3s;
  :if ([:len [/file find name=$scriptName]] > 0) do={
    /system backup save name=$backupFileName;
    :delay 1s;
    :if ([:len [/file find name=($backupFileName.".backup")]] > 0) do={
      /ip dns static remove [/ip dns static find comment=ADBlock];
      /import file-name=$scriptName;
      /file remove $scriptName;
      :log info "$logPrefix AD block script imported, backup file (\"$backupFileName.backup\") created";
    } else={
      :log warning "$logPrefix Backup file not created, importing AD block script stopped";
    }
  } else={
    :log warning "$logPrefix AD block script not downloaded, script stopped";
  }
} on-error={
  :log warning "$logPrefix AD block script download FAILED";
};


ArtVAnt
Сообщения: 158
Зарегистрирован: 30 окт 2020, 15:00

ошибку исправил, удалив записи, которые добавлял вручную


Sheva
Сообщения: 15
Зарегистрирован: 06 фев 2023, 17:29

кто ставит MikroTik StopAD, увеличивайте размер кеш в DNS Settings. По умолчанию на RB750GR3 - 2048КiВ, этого мало и блокировщик не эффективен. Я выставил 36000, занято 32900 при 11К записей DNS
Изображение


Ответить