Script to collect IPs from the DNS cache on address lists executes just first block of code.

Hello. The script is creating address lists just for the first block (amazonaws list), even though the DNS cache contains entries for the other domain keywords. Running the code directly from the Scheduler (the Scheluler doesn’t run the script if being called as a separate script) on RouterOS 6.45.8 I’ll reallly appreciate any help.

###### Use DNS Entrys and add Address to the Firewall Address-list #
:foreach i in=[/ip dns cache all find where (name~"amazonaws") && (type="A") && (data!="240.0.0.1")] do={
 :local tmpAddress [/ip dns cache get $i address];
delay delay-time=3000ms
# prevent script from using all cpu time #
 :if ( [/ip firewall address-list find where address=$tmpAddress] = "") do={ 
 :local cacheName [/ip dns cache get $i name] ;
 :log info ("added entry: $cacheName $tmpAddress");
 /ip firewall address-list add address=$tmpAddress list=amazonaws-hosts; } }
#
###### Use DNS Entrys and add Address to the Firewall Address-list #
:foreach i in=[/ip dns cache all find where (name~".bbcollab.com") && (type="A") && (data!="240.0.0.1")] do={
 :local tmpAddress [/ip dns cache get $i address];
delay delay-time=3000ms
# prevent script from using all cpu time #
 :if ( [/ip firewall address-list find where address=$tmpAddress] = "") do={ 
 :local cacheName [/ip dns cache get $i name] ;
 :log info ("added entry: $cacheName $tmpAddress");
 /ip firewall address-list add address=$tmpAddress list=blackboard-hosts; } }
#
###### Use DNS Entrys and add Address to the Firewall Address-list #
:foreach i in=[/ip dns cache all find where (name~".bbcollabcloud.com") && (type="A") && (data!="240.0.0.1")] do={
 :local tmpAddress [/ip dns cache get $i address];
delay delay-time=3000ms
# prevent script from using all cpu time #
 :if ( [/ip firewall address-list find where address=$tmpAddress] = "") do={ 
 :local cacheName [/ip dns cache get $i name] ;
 :log info ("added entry: $cacheName $tmpAddress");
 /ip firewall address-list add address=$tmpAddress list=blackboard-hosts; } }
#
###### Use DNS Entrys and add Address to the Firewall Address-list #
:foreach i in=[/ip dns cache all find where (name~".bbcollab.cloud") && (type="A") && (data!="240.0.0.1")] do={
 :local tmpAddress [/ip dns cache get $i address];
delay delay-time=3000ms
# prevent script from using all cpu time #
 :if ( [/ip firewall address-list find where address=$tmpAddress] = "") do={ 
 :local cacheName [/ip dns cache get $i name] ;
 :log info ("added entry: $cacheName $tmpAddress");
 /ip firewall address-list add address=$tmpAddress list=blackboard-hosts; } }
#
###### Use DNS Entrys and add Address to the Firewall Address-list #
:foreach i in=[/ip dns cache all find where (name~"whatsapp") && (type="A") && (data!="240.0.0.1")] do={
 :local tmpAddress [/ip dns cache get $i address];
delay delay-time=3000ms
# prevent script from using all cpu time #
 :if ( [/ip firewall address-list find where address=$tmpAddress] = "") do={ 
 :local cacheName [/ip dns cache get $i name] ;
 :log info ("added entry: $cacheName $tmpAddress");
 /ip firewall address-list add address=$tmpAddress list=whatsapp-hosts; } }

Not sure what you need help with?
Did you create the script?

Finally solved. I put each block of code on separate scripts and called them from a scheduler, inserting a delay between each script call. The delay made the difference.

Thanks Jotne for asking.

Please can you send me the step for which you did this? Thanks ahead. :slight_smile:

I would like a copy of the updated script. I’ve been having problems prioritizing traffic for Blackboard Ultra Collaborate.
My email is esantiago@opto.inter.edu

I took only a single piece of code and it doesn’t even run on V7.
It looks to me like something in the code is wrong.

:log info ("Start of script");
:foreach i in=[/ip dns cache all find where (name~"whatsapp") && (type="A") && (data!="240.0.0.1")] do={
	:log info ("Forach loop step");
	:local tmpAddress [/ip dns cache get $i address];
	:if ( [/ip firewall address-list find where address=$tmpAddress] = "") do={ 
	 :local cacheName [/ip dns cache get $i name] ;
	 :log info ("added entry: $cacheName $tmpAddress");
	/ip firewall address-list add address=$tmpAddress list=whatsapp-hosts; 
	} on-error={
		:log info ("Error on ip firewall");
	}
}
:log info ("End of script");

OK I have seen some horrible code but the above from me was a total mistake.
The next one works for now:

/log info ("Starting whatsapp script");
:foreach i in=[/ip dns cache all find where (name~"whatsapp")] do={
    :local tmpAddress [/ip dns cache get $i name];
    
    :if ( [/ip firewall address-list find where address=$tmpAddress] = "") do={ 
        :local cacheName [/ip dns cache get $i name] ;
        /log info ("added entry: $cacheName $tmpAddress");
        /ip firewall address-list add address=$tmpAddress list=whatsapp-hosts; 
    }
}
/log info ("Ending whatsapp script");
# Use DNS Entrys and add Address to the Firewall Address-list #
:foreach i in=[/ip dns cache all find where (name~"whatsapp") && (type="A") ] do={
 :local tmpAddress [/ip dns cache get $i address];
delay delay-time=10ms
# prevent script from using all cpu time #
 :if ( [/ip firewall address-list find where address=$tmpAddress] = "") do={ 
 :local cacheName [/ip dns cache get $i name] ;
 :log info ("ip de Whatsapp ingresada: $cacheName $tmpAddress");
 /ip firewall address-list add address=$tmpAddress list=Whatsapp timeout=01:0:00 comment=$cacheName;
}
}