Facebook  -  Twitter      

Questo forum fa uso dei cookie
Questo forum utilizza i cookie per memorizzare i dettagli del tuo login o della tua ultima visita. I cookie sono piccoli files di testo salvati nel computer; i cookie da noi utilizzati sono relativi unicamente ai servizi da noi forniti direttamente o dai banner pubblicitari. I cookie su questo forum salvano inoltre i dettagli relativi alle discussioni lette e alle tue preferenze personali. Sei pregato di selezionare il tasto OKAY se sei consapevole della presenza di questi files e ci autorizzi ad utilizarli per le informazioni specificate.

Indipendentemente dalla tua scelta un cookie verrà salvato per memorizzare nel tuo pc la risposta a questo form. Puoi modificare le impostazioni relative ai cookie nelle preferenze del tuo browser.

  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
[Mikrotik] Sync Address List with DNS Cache

#1
Information 
This script will update an address list from a given DNS cache search. This address list can then be used for example in Firewall settings.
Codice:
# Sync an address list with DNS cache

Codice:
# Version: 1.0.0

Codice:
# This script currently only works with type A and non-static DNS records.

Codice:
# If no matching DNS records are found:

Codice:
#    the address list is removed.

Codice:
# If matching DNS records are found:

Codice:
#    if an address list entry is NOT found in search result, it is removed.

Codice:
#    if an address list entry IS found in search result, is not modified.

Codice:
#    if a search result is NOT found in address list, it is added.

Codice:
#

Codice:
# Search string format:

Codice:
#   "(:|=|~)<search string>"

Codice:
#   :   match string anywhere

Codice:
#   =  match string exactly (case sensitive)

Codice:
#   ~  match string using regular expression (requires ROS >= v3.23)

Codice:
#

Codice:
# Example:  To search all records containing 'google.com':

Codice:
#                  :local search ":google.com"

Codice:
#

Codice:
#                  To search all records ending with 'microsoft.com':

Codice:
#                  :local search "~microsoft\\.com\$"

Codice:
:local search ":google.com"


Codice:
# The prefix of address list ("" = none)

Codice:
:local listprefix "DNSCache_"



Codice:
# Internal processing...

Codice:
:local IPs ""

Codice:
:local Names ""

Codice:
:local sop [:pick [:tostr $search] 0 1]

Codice:
:set search [:pick [:tostr $search] 1 [:len [:tostr $search]]]

Codice:
/ip dns cache all {

Codice:
  :local findex; :local property; :local value; :local name; :local type; :local data

Codice:
  :local sfound 0


Codice:
  :foreach rule in=[print detail as-value where static=no] do={

Codice:
     :set name ""; :set type ""; :set data ""


Codice:
     :foreach item in=$rule do={

Codice:
        :set findex [:find [:tostr $item] "="]

Codice:
        :set property [:pick [:tostr $item] 0 $findex]

Codice:
        :set value [:pick [:tostr $item] ($findex + 1) [:len [:tostr $item]]]


Codice:
        :if ($property = "name") do={ :set name $value }

Codice:
        :if ($property = "type") do={ :set type $value }

Codice:
        :if ($property = "data") do={ :set data $value }

Codice:
     }


Codice:
#   Search DNS cache name using specified operator

Codice:
     :set sfound 0

Codice:
     :if ($sop = ":") do={

Codice:
        :if ([:find [:tostr $name] [:tostr $search]] != "" && $type = "A") do={ :set sfound 1 }

Codice:
     }

Codice:
     :if ($sop = "=") do={

Codice:
        :if ([:tostr $name] = [:tostr $search] && $type = "A") do={ :set sfound 1 }

Codice:
     }

Codice:
     :if ($sop = "~") do={

Codice:
        :if ([:tostr $name] ~ [:tostr $search] && $type = "A") do={ :set sfound 1 }

Codice:
     }

Codice:
     :if ($sfound = 1) do={

Codice:
#         :put ("Found " . $name . " -> " . $data)

Codice:
        :set IPs ($IPs . $data . ",")

Codice:
        :set Names ($Names . $name . ",")

Codice:
     }

Codice:
  }

Codice:
# /ip dns cache all

Codice:
}


Codice:
:put ("DNS cache search found " . [:len [:toarray $IPs]] . " match(es) for '" . $search . "'")


Codice:
# Search through IPs and add to address list

Codice:
/ip firewall address-list {

Codice:
  :local findex; :local listaddr; :local IPsFound ""


Codice:
  :put ("Searching address list '" . ($listprefix . [:tostr $search]) . "'...")

Codice:
  :foreach l in=[find list=($listprefix . [:tostr $search])] do={

Codice:
     :set listaddr [get $l address]

Codice:
     :if ([:len [:find [:toarray $IPs] [:toip $listaddr]]] = 0) do={

Codice:
        :put ("   " . $listaddr . " not found in search, removing...")

Codice:
        remove $l

Codice:
     } else={

Codice:
#         :put ($listaddr . " found address in IPs")

Codice:
        :set IPsFound ($IPsFound . $listaddr . ",")

Codice:
     }

Codice:
  }


Codice:
# Add remaining records to address list

Codice:
  :set findex 0

Codice:
  :foreach ip in=[:toarray $IPs] do={

Codice:
     :if ([:len [:find [:toarray $IPsFound] [:toip $ip]]] = 0) do={

Codice:
        :put ("   Adding address " . $ip)

Codice:
        add list=($listprefix . $search) address=[:toip $ip] comment=([:pick [:toarray $Names] $findex]) disabled=no

Codice:
     }

Codice:
     :set findex ($findex + 1)

Codice:
  }

Codice:
# /ip firewall address-list

Cita messaggio


[-]
Condividi/Segnala (Mostra tutti)
Facebook Linkedin Twitter

Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
Information [Mikrotik] Sync Address List from DNS Lookup Results - CNAME and A Records berryberry 0 685 17-06-2015, 11:44
Ultimo messaggio: berryberry
Information [Mikrotik] Add Static DHCP Leases to ARP List berryberry 0 520 17-06-2015, 10:42
Ultimo messaggio: berryberry
Information [Mikrotik] Using Fetch and Scripting to add IP Address Lists berryberry 0 405 16-06-2015, 08:45
Ultimo messaggio: berryberry
Information [Mikrotik] Random MAC/Ethernet address generate and apply berryberry 0 328 15-06-2015, 11:55
Ultimo messaggio: berryberry
Information [Mikrotik] Sending your self an e-mail with DSL interface IP address berryberry 0 358 09-06-2015, 10:57
Ultimo messaggio: berryberry

Digg   Delicious   Reddit   Facebook   Twitter   StumbleUpon  


Utenti che stanno guardando questa discussione:
1 Ospite(i)


Powered by MyBB, © 2002-2017 MyBB Group.