Mikrotik Script: Marcar y controlar trafico de whatsapp por DNS

whatsappSi queremos controlar el ancho de banda de whatsapp por QoS o dropear o simplemente dejar pasar este trafico, podemos ejecutar este maravilloso script desde nuestro RouterOS, que recolecta las IP que usa esta aplicación de mensajería.

Las IP que recolecta realmente son MUCHAS!.

whatsapp_ips

 
Entonces, pegamos este codigo en la consola de comandos de routerOS y luego lo configuramos en el scheduler para que se ejecute cada 2 minutos. (o menos, dependiendo del procesador de tu equipo).
 

/system script add name=whatsapp policy=read,write,policy source="# chequear las entradas al \
    DNS\r\
    \n:foreach i in=[/ip dns cache find] do={\r\
    \n:local bNew \"true\";\r\
    \n:local cacheName [/ip dns cache all get \$i name] ;\r\
    \n# Revisar el DNS si contiene cadenas whatsapp\r\
    \n:if ([:find [/ip dns cache get \$i name] \"whatsapp\"] > 0) do={\r\
    \n:local tmpAddress [/ip dns cache get \$i address] ;\r\
    \n#---- Si address list esta vacio, no lo chequeo ( add address directly )\
    \r\
    \n:if ( [/ip firewall address-list find ] = \"\") do={\r\
    \n/ip firewall address-list add address=\$tmpAddress list=whatsapp_dns_ips\
    \_disabled=no comment=\$cacheName; \r\
    \n} else={\r\
    \n#------- chequeo cada entrada del address-list para no repetir las ips\r\
    \n:foreach j in=[/ip firewall address-list find ] do={\r\
    \n#---------- set bNew variable to false if address exists in address list\
    \r\
    \n:if ( [/ip firewall address-list get \$j address] = \$tmpAddress ) do={\
    \r\
    \n:set bNew \"false\";\r\
    \n}\r\
    \n}\r\
    \n#------- Si la direccion (IP) es nueva, la agrego al ADDRESS-LIST\r\
    \n:if ( \$bNew = \"true\" ) do={\r\
    \n/ip firewall address-list add address=\$tmpAddress list=whatsapp_dns_ips\
    \_disabled=no comment=\$cacheName; \r\
    \n}\r\
    \n}\r\
    \n}\r\
    \n}"

14 Comentarios

  1. Hola! Es reconfortante leer post sobre programación mikrotik de nuevo!
    Estoy realmente interesado en temas sobre Mikrotik, y especialmente sobre la programación API en php… Estaré atento a ello. Gracias!

  2. hola que tal buenas tardes mira estoy mirando este post pero no me esta ejecutado el script, podrias colocar mejor un export de las reglas de mikoritk o un archivo en .txt, una pregunta mas, que versión es el mikrotik ?

    Saludos

  3. Cristian; El problema es que se importa desde la consola.
    Ingresa primero en “system”.. luego en “scripts”.
    y luego pegas el codigo.!! si no te anda avisame!.

  4. muy bueno y funciona bien, para mi gusto le falta una cosa, a final del script tendría que revisar si la lista vieja todavia existe o sea si los dominios puestos anteriormente todavia son validos para no acumular ip.

  5. Hola … Estupendo aporte, el script funciona muy bien, pero hay que ponerlo en un Schedule para ejecutarse periodicamebnte…. en mi caso, lo use no para bloquear whatsapp, sino al revés , únicamente se permite el tráfico de Whatsapp, y ninguno más.. como dije me funciona muy bien, sin embargo, tengo un problemilla.. cuando las llamadas de voz y video, sales no hay problema, pero cuando son entrantes, el host remoto que llama escucha el audio, pero el host local no escucha el audio… alguien tiene alguna idea???
    aplique esta regla de firewalll: chain: forward, protocolo:tcp, src-address-list: !whatsap-dns-list, acction:drop, in-interface:wan

Deja un comentario