API MIKROTIK – Agregar una dirección al firewall address-list

En esta ocasión, les traigo algo muy usado por todos los mikroteros. Los address-list que siempre nos han facilitado las cosas. He visto ejemplos en otros sitios webs intentando manejarlas, y hasta incluso códigos copiados/editados de este blog (sin poner la fuente), pero claro, sin funcionar :p. Bueno, aca lo tienen!.

<?php require_once('api_mt_include2.php'); ?>
<?php
/*
/// AUTOR: Tech-Nico.com ///
/// admin@tech-nico.com /////
/// API: Firewall Address-list: agrego una direccion IP a un address-list
/// Fecha: 26/08/2015 
 
//////// configura tus datos
$ServerList ="192.168.100.1"; //ip_de_tu_API
$Username ="api"; //usuario_API
$Pass ="#pass"; //contraseña_API
$Port ="8727"; //puerto_API
*/
/// VARIABLES DE FORMULARIO
$address= "5.4.3.1";  // direccion que cargaremos en el address-list
$list=    "FACEBOOK";  // nombre de la lista donde cargaremos la direccion 
$comment= "Este es un ejemplo de tech-nico.com"; // comentario
if( $address !="" && $list!=""  ){
    $API = new routeros_api();
    $API->debug = false;
    if ($API->connect($ServerList, $Username, $Pass, $Port)) {
       $API->write("/ip/firewall/address-list/getall",false);
       $API->write('?address='.$address,false);
       $API->write('?list='.$list,true);       
       $READ = $API->read(false);
       $ARRAY = $API->parse_response($READ); // busco si ya existe
        if(count($ARRAY)>0){ 
            echo "Error: Ya existe " . $list ." con la direccion: ".$address;
        }else{ // si no existe lo creo
            $API->write("/ip/firewall/address-list/add",false);
            $API->write('=address='.$address,false);   // IP
            $API->write('=list='.$list,false);       // lista
            $API->write('=comment='.$comment,true);  // comentario
            $READ = $API->read(false);
            $ARRAY = $API->parse_response($READ);
            echo "Se agrego la direccion " . $address ." a la lista: ".$list;
        }
        $API->disconnect();
    }
}
?>

Por favor, pongan la fuente si van a copiar y pegar en otro sitio.!!

_________________
Primero en tech-nico.com

14 Comentarios

  1. hola como estan me gustaria que me ayudaran a como resolver este problema
    Notice: Undefined variable: receiveddone in C:\xampp\htdocs\prueva\api.php on line 302

  2. Hola Jose, al parecer te esta diciendo que la variable “receiveddone” no esta definida. Fijate que en el codigo que yo postie no existe. Saludos.

  3. yo lo tengo armado y todo funciona bien solo tengo ese problema y no eh podido corregirlo te voy a pasar el codigo

    Sistema de Gestion ISP

    Inicio
    Clientes
    PPP Secrets
    Hotspot
    Configuracion
    Contact

    connect($ipRouteros , $Username , $Pass, $api_puerto)) {
    ?>

    Editar Cliente:

    Seleccione Cliente a editar

    write(“/queue/simple/getall”,true);
    $READ = $API->read(false);
    $ARRAY = $API->parse_response($READ);
    echo ”;
    for($i=0;$i<count ($ARRAY);$i++){
    if(!empty($ARRAY[$i]['name']))
    echo '’.$ARRAY[$i][‘name’].”;
    }
    echo ‘

    ‘;
    }
    else{
    switch($_POST[‘accion’]){
    case ‘Eliminar’:$API->write(“/queue/simple/getall”,true);
    $READ = $API->read(false);
    $ARRAY = $API->parse_response($READ);
    for($i=0;$iwrite(“/queue/simple/remove”,false);
    $API->write(“=.id=”.$ARRAY[$i][‘.id’],true);
    $READ = $API->read(false);
    $ARRAY = $API->parse_response($READ);
    echo ‘Queue Eliminado’;
    break;
    }
    }
    break;
    case ‘Editar’: echo ‘Opcion en construccion’;
    break;
    }
    }
    }else{
    echo ‘Error en conexion’;
    }
    ?>

    Lista de Clientes:

    usuarios
    Nuevo
    Suspender
    Eliminar
    Retirar
    Avanzado

    connect($ipRouteros , $Username , $Pass, $api_puerto)) {
    ?>

    Nombre del ClienteLimite Subida/BajadaNo de Ip

    write(“/queue/simple/getall”,true);
    $READ = $API->read(false);
    $ARRAY = $API->parse_response($READ);
    for($i=0;$i<count ($ARRAY);$i++){
    if ($i%2==0)
    echo '’.$ARRAY[$i][‘name’].”.$ARRAY[$i][‘max-limit’].”.$ARRAY[$i][‘target-addresses’].”;
    else
    echo ”.$ARRAY[$i][‘name’].”.$ARRAY[$i][‘max-limit’].”.$ARRAY[$i][‘target-addresses’].”;
    }
    ?>

    PPP Secrets:

    Nombre de SecretClavePerfil

    write(“/ppp/secret/getall”,true);
    $READ = $API->read(false);
    $ARRAY = $API->parse_response($READ);
    for($i=0;$i<count ($ARRAY);$i++){
    if ($i%2==0)
    echo '’.$ARRAY[$i][‘name’].”.$ARRAY[$i][‘password’].”.$ARRAY[$i][‘profile’].”;
    else
    echo ”.$ARRAY[$i][‘name’].”.$ARRAY[$i][‘password’].”.$ARRAY[$i][‘profile’].”;
    }
    }
    ?>

    Copyright © 2015 MIKROBILLING


  4. buenas tardes… despues de algunos anõs del post aún siguen surgindo dudas jaja

    yo tengo el mismo problema de:

    soporte en Noviembre 18, 2015 en 12:28 am dijo:
    Hola Jose, al parecer te esta diciendo que la variable “receiveddone” no esta definida. Fijate que en el codigo que yo postie no existe. Saludos.

    esta en el archivo “api_mt_include2.php”
    y la linea es:

    // If we get a !done, make a note of it.
    if ($_ == “!done”)
    $receiveddone = true;
    $STATUS = socket_get_status($this->socket);
    if ($LENGTH > 0)
    $this->debug(‘>>> [‘ . $LENGTH . ‘, ‘ . $STATUS[‘unread_bytes’] . ‘]’ . $_);
    (linea 301) if ((!$this->connected && !$STATUS[‘unread_bytes’]) || ($this->connected && !$STATUS[‘unread_bytes’] && $receiveddone))
    break;

    Notice: Undefined variable: receiveddone in C:\xampp\htdocs\tech-nico\api\api_mt_include2.php on line 301

    alguien lo ha logrado corrigir eso??

    Gracias!!!!!

  5. Hola Nico, muchas gracias x la rapida respuesta, estuve mirando el codigo, xo jooo iba a perder mas tiempo buscando el error en vez de preguntarte. Estoy haciendo una app y no te preocupes, que voy poner el fuente (thanks to:) para ti en un apartado. Muchas gracias una vez mas. Hermeson

  6. Hola, sigo probando tu codigo y vuelvo a tener el siguiente error, no se si alguien le pase lo mismo y ya pudo corregirlo…

    Fatal error: Maximum execution time of 30 seconds exceeded in

  7. Disculpen ya logre hacer que funcione, al parecer el problema esta en la librería que estaba usando la primera versión del primer ejemplo y después de bajar la que corrigió Nico, se soluciono el problema, gracias por tu sitio y tu contribución al mundo de mikrotik

Deja un comentario