API MIKROTIK Tercera parte – Nuestro primer ejemplo (codigo abierto)


Hola amigos.

Tal como lo habíamos anunciado en la Segunda parte, vamos a dar un caso de uso real,
en esta ocasión dedicado para el señor Nemox de Micromax Computación R.L. (Barinas – Venezuela) El nos pidio hacer algo especifico: Poder controlar la lista de «Hotspot > IP-Bindings» desde su celular; y  para comprobar que con el API se puede hacer prácticamente todo, tome su caso como un desafió.

Y aqui el resultado:
API-hotspot_ipbindingsapi_desde_iphone

A la izquierda esta visto desde el Iphone de Nemox. Y a la derecha desde el google chrome.

Muestra la lista de Hotspot – Ip Bindings y permite eliminar, habilitar y deshabilitar un cliente. El boton «agregar» no esta programado, pero dejo el código abierto para que cualquiera pueda editarlo y agregar o quitar funcionaliedades.

Esta armado el esqueleto del sitio en HTML5 y CSS3, los eventos y funcionalidades estan hechos con JQuery y el manejo del API con PHP5.

Vamos por partes:

El codigo de los 4 botones, Agregar, Eliminar, Habilitar, Deshabilitar, esta en el archivo index.html; si lo abrimos y vamos hacia el final, mas precisamente en la linea 110 veremos el codigo de cada boton. Pueden notar que cada boton tiene un codigo muy parecido. Lo que hace es, si esta seleccionado algun cliente (binding), toma su ID de un campo oculto (hidden field) para luego enviarlo como parametro al PHP que ejecuta la accion dentro del routerOS.
En la linea 119 vemos como ejemplo la ruta api/hotspot_general.php?ac=enable&id=numero  que tiene 2 parametros: «ac» (accion) que en nuestro caso son  las de los botones e «id» que es el codigo que identifica al IP Binding seleccionado con 1 click.

index.html
APIcodigobotones

APIcodigoPHP

 

api/hotspot_general.php
Este es el archivo que se comunica con tu RouterOS por medio del API, tienes que editar las primeras lineas con los datos de tu servidor: Revisen los otros archivos de la carpeta «api».

$ipRouteros=»192.168.33.200″;
$Username=»usuario»;
$Pass=»contraseña»;
$api_puerto=8727;

A partir de la linea 30 comenzamos a ver los casos para el parametro «ac» y depende el parametro que le pasemos es lo que ira a ejecutar. Creo que esta muy facil de entender. Para el boton «Agregar» debemos añadir un nuevo «case» con el parametro correspondiente.

El codigo que ejecuta la accion en el Mikrotik es este:

case «enable»:
$API->write(«/ip/hotspot/ip-binding/enable«,false);
$API->write(«=.id=».$id,true);
$READ = $API->read(false);
$API->parse_response($READ);
break;

Es muy facil de entender:

Hay comandos que nos solicitan datos. Antes de ejecutar el codigo con PHP lo probamos en la consola. Escribimos /ip hotspot ip-binding print  y vamos a saber quien esta desabilitado y su codigo ID.
Tomemos cualquier nro para testear y probemos:  /ip hotspot ip-binding enable.(enter) y nos va a pedir el ID, en nuestro ejemplo de prueba ponemos el 7 que esta deshabilitado.

API-consola

Bien, aqui tenemos estas 2 lineas:

$API->write(«/ip/hotspot/ip-binding/enable»,false);
$API->write(«=.id=».$id,true);

El flag false o true se refiere a que si este comando requiere de un dato, id, etc todavia no ejecuta el comando hasta no tener todo lo que necesita. Como vemos en la segunda linea el flag es true ya que el comando esta completo y lo manda a ejecutar.

Las siguientes 2 lineas…

$READ = $API->read(false);
$API->parse_response($READ);

son la respuesta de lo que ejecutamos, que en nuestro codigo no la estamos mostrando. Si el numero de ID no existiera, nos devolvería un error de «no such item». O si el comando ejecutado nos traeria una lista deberiamos recorrer el array $READ con un for para mostrar lo que se nos antoje.

Hay cosas que no las estoy explicando porque estan muy bien comentadas. Si no se entiende algo por favor pregunten.

Acá va el código abierto del ejemplo: mikrotik-test

Enjoy the saturday!

API MIKROTIK – Como optimizar tu administracion con un poco de PHP (introduccion)

API MIKROTIK Tercera parte – Nuestro primer ejemplo (codigo abierto)

API MIKROTIK – Crear queues simples con PHP (con validacion)

_______________________________________
Primero en tech-nico.com Autor Nicolas Daitsch

53 comentarios en “API MIKROTIK Tercera parte – Nuestro primer ejemplo (codigo abierto)

  1. Excelente tu aporte, lo acabo de implantar en mi servidor apache, anda muy muy bien, ahora sera mucho mas facil activar y desactivar clientes sin entrar al winbox, veo que la api no esta limitada, se puede hacer muchas cosas, tratare de ir adaptando a mis necesidades para hacer el trabajo mucho mas comodo, basta con aprender un poco programacion html & ajax. Gracias amigo estaremos en contacto!!

  2. Buenas amigo, viendo los tres avances de las Api me da a entender que se puede crear un radius manager completamente hecho por uno…? Ahora quisiera saber como puedo manejar la creación de usuarios y así manejar con el hotspot y ver su tasa de consumo… Muchas Gracias de antemano…
    Aragua – Venezuela

  3. hola. aun no tengo exito con mis pruebas, me gsutaria me puedas ayudar con una sola y asi continuar.
    tu tutorial esta exelente, estoy queriendo probar con el registro de usuarios
    q esta en aqui: http://zonawifi.vzpla.net/.
    Gracias

  4. Albert, edita el archivo conectar_test_api.php y en la linea donde dice, debug= false; reemplazala por debug = true;
    De esa manera te va a dar un log de los intentos de conexion y el error. Fijate que tengas bien configurado el nat (en algunos casos requiere de un masqarade). Puedes pegar el log aqui y te ayudo a interpretarlo. Slds. Nicolas.

  5. Hola, ante todo gracias, el tuto esta genial, ya he ido adaptando a lo que necesito y me funciona de maravilla, pero tengo una dificultad que no he podido solventar, y es que cuando me muestra las diferentes grillas o tablas de clientes, no se como hacer para ordenar de forma ascendente o descendente, si me pudieran ayudar, quedaría muy agradecido. Saludos

  6. Saludos, Estoy impleente la creacion de Usuarios con Queue Simple desde PHP con API hacia el MKT, hasta ahora no hay problemas con la sentencia ADD de Queue Simple, pero el problema me suscita cuando necesita primeramente verificar si ese Usuario (por Ip) ya existe si es el caso, entonces, necesito REMOVERLO y crear uno nuevo (ADD). Pordrias ser tan amable y permitirme un ejemplo al respecto???

  7. Hola, recien encuentro estos articulos y me parecen muy buenos.
    No se programar, pero voy a usar estos ejemplos para probar algo.
    Mi esquema de red es el siguiente:

    Dhcp + queue simples

    en el mismo dhcp creo las queues simple. cuando agrego un abonado.

    Mi idea es agregar algo de seguridad, como si fuera validar con radius. o algo que lei por arriba que se podria con un API.

    Gracias

  8. gracias ,, esta tarde voy a realizar las pruebas,,
    consulta: Existe algun sitio donde se puedan descargar plantillas / ejemplos de apis ya programadas?

  9. Pingback: API MIKROTIK – Crear queues simples con PHP (con validacion) | Blog tech-nico.com

  10. Muchas Gracias por el Aporte, pude al fin conectar con el servidor Mikrotik. El problema estaba cuando genere el archivo php en el apache.
    El unico inconveniente que tengo es que cuando me muestra el listado de bindings, solo se ve hasta la mitad de la columna server. debe ser por problemas de tamaño de letras?? gracias
    Enrique

  11. Cuales son los parametros que hay que tomar en cuenta para poder trabajar con el api de php y mk desde fuera de mi red?…
    es decir, yo tengo mi aplicacion y edito suarios de mk con php asi como tu pero si quiero subir esta pagina a la web y tener acceso a mk desde fuera, que debo conciderar para que el api se comunique… debo modificar algo de mi modem o de mikrotik o como en eso estoy totalmente perdido si puedes ayudarme te lo agradeceria, saludos y gracias por tus aportes!

  12. Parametros:

    • Tener bien configurado el RouterOS donde queres acceder a leer datos. Habilitar el servicio API, crear un usuario de acceso con permisos api, read, write.
    • Tener un servidor Web que ejecute PHP. Si no tenes un servidor web publico (puede ser propio o un hosting pago), podes instalar WAMP (win), XAMP (linux) o MAMP (Os X) y ejecutar los scripts desde tu propia computadora. Esta bueno para desarrollar y testeara, o bien para una aplicacion de escritorio.
    • Tener la libreria PHP de David. Esta zipeada en cualquier ejemplo que descargues de mi blog.
    • Saber un poquito de PHP

    Te recomiendo que leas el post: http://www.tech-nico.com/blog/api-mikrotik-segunda-parte-usando-el-api-con-php/

  13. Buenos días.
    Primero querría dar la enhorabuena por los fantásticos artículos de tu blog que últimamente me están siendo de mucha utilidad.
    Estoy usando el api de mikrotik para entre otras cosas en determinado momento poder eliminar una conexión activa de un cliente, pero no consigo hacer que me funcione el comando. Estaba probando con «ppp active remove» y posteriormente pasarle el «id» de conexión, pero no me funciona. Podría echarme una mano?

    Muchas gracias.

  14. Hola David, Es muy facil!. Por el mail que me enviaste estas muy muy cerca, Pero estas pasando mal los parametros a la funcion del API.
    Hoy mismo voy a publicarte el codigo «Kick»que uso para patear a un usuario pppoe activo. Saludos.

  15. hola que tal probe el codigo para hacer la conexion a mikrotik y funciona de maravilla no se mucho de progracion y casi nada de php….yo recien implemente un hotspot wifi y conecto a mis clientes a internet por determinado tiempo….y quisiera saber como hacer el codigo para suspender la cuenta del «usuario» y botarlo del «active» cuando su tiempo expire…no manejo ip-binding…solo user y su mac…hasta el momento todo lo hago manual y estoy pegado a mi laptop para no regalar tiempo de conexion……te agradeceria bastante si me das una pista de como iniciar……desde ya gracias…………….

  16. Hola Lenin, mmmm si me decís exactamente que queres hacer en mikrotik cuando tenga tiempo armo un ejemplo. Yo te armo la programacion demo. La parte de mikrotik la tenes que resolver vos. Saludos.

  17. gracias por responder….yo tengo un cyber cafe en el cual implemente un hotspot..en el centro de mi pequeña poblacion….actualmente yo conecto a mis clientes por hora, por dia, por semanas y por mes…y toda esta cuestion de cortar el servicio a un cliente cuando ya se termino su servicio, lo hago manualmente es decir tengo que estar monitoreando el final de su tiempo o dia o semana para cortarle el servicio…
    por esa razon quisiera saber la manera de agregar un cliente a mi hotspot, asi como su mac y poder asignarle el tiempo de conexion…pero lo mas importante que pueda programar el corte de su servicio…es decir que el php lo corte en el dia y hora programada::::::mejor aun si al darle por ejemplo 1 hora a un cliente sea el php quien lo corte deshabilitando su cuenta y botandolo de la pestaña «active» para que cuando vualva a meter sus datos ya no pueda accesar……………………………..todos mis clientes se conectan ingresando su «usuario» y «pass»…..no se si me explico con lo que quiero…..dejo mi correo ….cybercomal@gmail.com

  18. bueno si funciona pero no se porque me aparece descuadrado…y me dice algo del index…. me aparece la mac del cliente y la puedo eliminar o suspender…pero no me aparecen ordenadas…….una pequeña ayuda porfas………
    ……………………………………………………………..
    ( ! ) Notice: Undefined index: comment in C:\wamp\www\test_api_hotspot\api\hotspot_ip-binding-all.php on line 27
    Call Stack
    # Time Memory Function Location
    1 0.0010 149312 {main}( ) ..\hotspot_ip-binding-all.php:0
    ;;;

    68:A3:C4:F7:EE:CD

    ( ! ) Notice: Undefined index: address in C:\wamp\www\test_api_hotspot\api\hotspot_ip-binding-all.php on line 33
    Call Stack
    # Time Memory Function Location
    1 0.0010 149312 {main}( ) ..\hotspot_ip-binding-all.php:0

    ( ! ) Notice: Undefined index: address in C:\wamp\www\test_api_hotspot\api\hotspot_ip-binding-all.php on line 34
    Call Stack
    # Time Memory Function Location
    1 0.0010 149312 {main}( ) ..\hotspot_ip-binding-all.php:0

    hotspot1
    bypassed

  19. perdon ya quedo solucionado…gracias… todo sobre ip binding..ya esta funcionando de maravilla….
    …………………………………………..
    ahora tengo una inquietud..si yo no quiero trabajar con ip binding y quiero por ejmplo solo poder agregar un usuario a hotspot, asi como su contraseña , tiempo de conexion y corte automatico de acuerdo al tiempo dado…. como seria el codigo …solo denme una pista y yo le sego……..no si alguin este trabanjo asi…

    por sus respuestas gracias….saludos..

  20. Hola Lenin, tienes el código de tu ultima solución?? podrias compartirla?
    Gracias de antemano
    Saludos!

  21. Me gustaría me ayuden a desarrollar una aplicación para entregar a mis clientes solo para que vean el trafico consumido en vivo y un historial de consumo…

  22. Carlos, Ya me lo han pedido antes, asi que lo vamos a desarrollar y postear en la próxima entrega. Saludos.

  23. tengo un router arris tg862 y otro ubee con cable coaxial de 15 mg deseo unirlos para unir con un RouterBOARD RB450G el anteriormente estuvo configurado para unir dos lineas de 4mg con 2 router tp link y funcionaba bien ahora no se como adecuarlo a mis nuevos router arris y ubee con cable coaxial

  24. tengo un problema de conexión no se si podrías orientarme, tengo la api montada en godaddy, y donde tengo el mikrotik esta redireccionada con No-ip todo párese bien desde cualquier parte veo el webfig de mikrotik, pero no conecta la api muestra

    Connection attempt #1 to xxxx:8728… Connection attempt #2 to xxxx:8728… Connection attempt #3 to xxxx:8728… Connection attempt #4 to xxxx:8728… Connection attempt #5 to xxxx:8728… Error…

    podrías ayudarme por favor para poder conectar, gracias.

  25. Emanuel, podes chequear que el puerto del api este habilitado en «IP – Services» de tu RouterOS, y revisar tambien el usuario.. contraseña y permisos de «api, read, write» en el usuario que usas para conectarte desde el API. Saludos

  26. Saludos amigo. Me parece excelente la ayuda que estas dando a las personas. Tengo un mikrotik desde hace un tiempo y en realidad he colocado uno que otro scrip no manejo muy bien el lenguaje, hasta ahora me esta funcionando bien gracias a Dios. Necesito crear un scrip que cambie el profile de los usuarios cuando a estos les quede entre de 500000 y 100000 Bytes en la ventana active del hotspot, mis planes son por gigas (8, 12 y 15 GB) y cuando esten entre ese valor quiero es pasarlos a un profile de baja velocidad hasta que termine la renta de ese mes. mi idea es que ese scrip se ejecute cada 30 minutos para verficar los clientes activos. Otra parte que queria hacer era que mis clientes desde mi web pudieran consultar sus Gigas disponible ingresando su usuario y clave del hotspot. Agradeceria tu ayuda y/o comentarios

  27. que tal mi hermano… excelente tu blog… recien me quiero adentrar al aprendizaje del manejo de la API de MK… una pregunta:
    sera factible hacer algo asi como guardar un historial de los clientes que manejo por hostpot… cuando accesan, que tiempo navegaron, a que horas, etc.??? desde ya muchas gracias por tu ayuda altruista… Bendiciones…!!!

  28. Roberto, esos son datos que actualmente estas sacando del Mikrotik?. Si se podria armar algo. Estoy por comenzar a reescribir algunos codigos, y quiero lograr implementar la parte de hotspot que aun no la he tocado nunca. Espero que el tiempo me lo permita.

  29. Estimado,

    Felicitaciones por compartir tanto conocimiento con la comunidad, la verdad este mundo necesita mas gente como tu.

    Por otro lado, tengo una duda referente a algo que estoy armando:
    -Necesito tener una consola o interfaz que sea capaz de conf. usuario y password de muchos Mk que administro, la idea original es tener algo parecido a RADIUS que cumpla este fin, cuando un usuario trate de entrar a la administración de cada mk que administro, este venga directamente a esta consola y valide las credenciales de acceso a la administracion.
    La politica seria cambiar las credenciales de acceso a todos los MK cada cierto tiempo y al mismo tiempo.

    La consulta es saber si esta API es capaz de realizar dicha tarea.

    Te agradecería si me pudieras contestar a mi correo flaviogonzalezdesign@gmail.com

    Espero tus comentarios y muchas gracias.

    Saludos.

  30. Flavio, SI!!! es totalmente posible!! Con este API se puede hacer eso y mucho mas.! Saludos.

  31. que tal, amigo he probado tu codigo y me funciono a la perfección, en mi caso lo use con user profiles y user, sin embargo al ser varios resultados se hace una lista larga, como podría paginar los resultados?

  32. hola como estas, muy buenos tus tutoriales, tengo que hacer un trabajo y no se aun como hacerlo, agradeceria algunas ideas, veras quisiera que cuando realize una lectura de una tarjeta rfid (el lector ya lo tengo, d echo ya puedo subir las lecturas a mysql mediante php y arduino), quisiera saber si puedo hacer que cada vez q haga la lectura se pueda activar un usuario del hotspot, y por consiguiente el usuaro haga su respectiva autenticacion, si esq no se realizase esa lectura el usuario no puediese navegar… porfas necesito tu ayuda

  33. hola alguien que me ayude a la configuracion
    para cortar el internet a mis clientes por
    macc adrees tengo un groove a-5hn mikrotik
    ya radea y le coloque una contraseña el
    problema es cuando se les vensa como
    quitarles la navegacion por separado
    a cada cliente ya que unos
    rentan por mes por dis etc de antemano gracias

  34. Hola muy interesante tu trabajo, tengo un WISP con routers mikrotik y quiero automatizar el sistema de cortes de servicio a los clientes impagos tengo la información de mi sistema contable en un sistema basó en ora le y quiero esta información que sea sincronizada con radios manager para el corte me puedes ayudar con esto? Mi correo es efreire@speedy.com.co Gracias de antemano

  35. Hola amigo, disculpa se podria imprimir solo una columna por ej: solo la de server o la de mac-adrees.

  36. Agradecido por tanto..
    Quisiera me pueda ayudar a desarrollar lo siguiente: Necesito que cuando nos clientes se conecten a mi red le puedan dar like a mi página, una vez realizado esto les permita navegar a una velocidad de bajada de 2 MB y subida 128 k, espero no sea mucha molestia, nuevamente gracias..!!

  37. Hola muchas gracias por compartir esta informacion, me gustaria preguntarte si esto tambien es posible teniendo los api en mi pagina web (nube) servidor cpanel y los ap o mikrotik en diferentes sitios y servicios de internet con ip dinamicas.
    Gracias.

  38. saludos amigo me gustaria que me brindaras soporte en cuanto a la conexion de api en la nubes al mikrotik queria saber su costo amigo

  39. hola me gustaria saber cual es la manera correcta de ejecutar un comando mediante el API php para poder hacer un release de una interfaz, estoy probando con $API->write(«/ip/dhcp-client/release 1»); y no me funciona tambien he probado de igual manera con comm y no obtengo el resultado esperado. Gracias.

  40. Edder Yoel, creo que tenes que pasar el «1» como parametro en otra linea. Revisa los ejemplos del blog que hay muchos.

  41. Hola a todos, estoy implementando la api con php y creo que debe haber alguna actualizacion porque me da error de usuario. De hecho tengo que usar la ultima version de winbox porque con las anteriores me da el mismo problema para logearme. ¿sabeis algo?

  42. buenas tarde soy relativamente nuevo en esto de mikrotik, me gustaria poder controlar el alta de usuarios en hotspot, es decir poder hace un ABC de usuarios y creo que con esta API se puede sin embargo no conozco el funcionamiento de esta, espero me puedan ayudar
    gracias.

  43. HOLA NECESITO AYUDA URGENTE POR FAVOR.
    Necesito ejecutar este comando: ip firewall address-list print where address ~»10.16.x» and list!=»CLIENTE» pero no lo puedo ejecutar desde la API de php no entiendo como deberia escribir desde el where por favor si alguien puede darme una solucion.

Deja un comentario