From 361933b2c0dacdbe7bd5dee8acfcb34842813032 Mon Sep 17 00:00:00 2001 From: zainarbani Date: Tue, 12 Apr 2022 05:06:33 +0700 Subject: [PATCH] mod: Introduce dns-adblock Signed-off-by: zainarbani --- mod/dns-adblock | 124 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 mod/dns-adblock diff --git a/mod/dns-adblock b/mod/dns-adblock new file mode 100644 index 0000000..7301efb --- /dev/null +++ b/mod/dns-adblock @@ -0,0 +1,124 @@ +#!rsc by RouterOS + +:global UpdateAdblock; +:global HelpAdblock; +:global ShowAdblockHost; +:global AddAdblockHost; +:global RemoveAdblockHost; + +:global RunAdblockHost do={ + # store hostlist as script + :if ([:len [/system script find where name=adblockhostlist]] = 0) do={ + /system script add name=adblockhostlist source=":global AdblockHost" + } + :if ($1 = "update") do={ + :global NewAdblockHost; + /system script set [find where name=adblockhostlist] source=(":global AdblockHost $NewAdblockHost"); + } + /system script run adblockhostlist +} + +:set $HelpAdblock do={ + :local HelpAdblockList {\ + "\$UpdateAdblock - Update static DNS entries";\ + "\$ShowAdblockHost - Show current sources";\ + "\$AddAdblockHost [URL] - Add new sources, eg: https://adaway.org/hosts.txt";\ + "\$RemoveAdblockHost [Number] - Remove specified source, eg: 0"\ + } + :foreach x in=$HelpAdblockList do={ + :put $x + } +} + +:set $ShowAdblockHost do={ + :global AdblockHost; + :if ([:len $AdblockHost] = 0) do={ + :error "No source found" + } + :foreach x,y in=$AdblockHost do={ + :put ("$x $y") + } +} + +:set $AddAdblockHost do={ + :if ([:len $1] < 1) do={ + :error "No URL specified!" + } + :global AdblockHost; + :global RunAdblockHost; + :global NewAdblockHost; + :local CurAdblockHost; + :if ([:len $AdblockHost] != 0) do={ + :foreach x in=$AdblockHost do={ + :set CurAdblockHost ("$CurAdblockHost\"$x\";") + } + :set NewAdblockHost ("{$CurAdblockHost\"$1\"}") + } else={ + :set NewAdblockHost "{\"$1\"}" + } + $RunAdblockHost "update" + :put ("Added new source: $1") +} + +:set $RemoveAdblockHost do={ + :if ([:len $1] < 1) do={ + :error "No number specified!" + } + :global AdblockHost; + :global RunAdblockHost; + :global NewAdblockHost; + :local CurAdblockHost; + :if ([:len $AdblockHost] = 0) do={ + :error "No source found" + } + :foreach x,y in=$AdblockHost do={ + :if ($x != $1) do={ + :set CurAdblockHost ("$CurAdblockHost\"$y\";") + } else={ + :put ("Removed source: $y") + } + } + :if ([:len $AdblockHost] <= 1) do={ + :set AdblockHost "" + :set NewAdblockHost "" + } else={ + :set NewAdblockHost ("{$CurAdblockHost}") + } + $RunAdblockHost "update" +} + +:set $UpdateAdblock do={ + :global AdblockHost; + :if ([:len $AdblockHost] = 0) do={ + :error "Add source first!" + } + :local AdblockHostList; + :foreach x in=$AdblockHost do={ + :set AdblockHostList ("$AdblockHostList$x,") + } + :set $AdblockHostList [:pick $AdblockHostList 0 ([:len $AdblockHostList]-1)] + # https://github.com/tarampampam/mikrotik-hosts-parser + :local parserVer "4.4.0"; + :local adblockLimit "5000"; + :local redirectTo "127.0.0.1"; + :local excludedHost "localhost,localhost.localdomain,broadcasthost,local,ip6-localhost,ip6-loopback,ip6-localnet,ip6-mcastprefix,ip6-allnodes,ip6-allrouters,ip6-allhosts"; + :local hostScriptUrl ("https://stopad.cgood.ru/script/source\?format=routeros&version=$parserVer&redirect_to=$redirectTo&limit=$adblockLimit&sources_urls=$AdblockHostList&excluded_hosts=$excludedHost"); + :local scriptName "stop_ad.script"; + do { + /tool fetch check-certificate=no mode=https url=$hostScriptUrl dst-path=$scriptName + :delay 3s; + } on-error={ + :error "Fetch source failed" + } + :if ([:find [/file get $scriptName contents] "Script generation failed"]) do={ + :error "Invalid/unsupported source" + } else={ + /ip dns static remove [/ip dns static find comment=ADBlock] + /import file-name=$scriptName + /file remove $scriptName + :put "Static DNS entries updated successfully" + } +} + +# Initialize adblockhostlist +$RunAdblockHost \ No newline at end of file