Beruflich Dokumente
Kultur Dokumente
Nota: Este es solo uno de los tres clientes de PHP API. Echa un vistazo también a los clientes API por Kamil Trzcinski y Denis Basta
Contenido
1 cliente
1.1 Documentación
1.2 Créditos y material legal
2 ejemplos
2.1 Imprimir registros del enrutador (como texto sin formato)
2.2 Imprimir registros del enrutador (como tabla HTML)
2.3 Ping del enrutador
2.4 Formulario "Cambiar contraseña" para usuarios de hotspot
2.4.1 Bonificación: "Cambiar contraseña" independientemente de la ubicación del servidor web
2.5 Formulario de "contraseña olvidada" para usuarios de hotspot
2.6 Generador de contraseñas de Wi-Fi aleatorio
2.7 Buscador MAC
3 Ver también
Cliente
Los ejemplos en esta página usan el paquete PEAR2_Net_RouterOS (http://pear2.github.com/Net_RouterOS/) . Puede instalarlo con Pyrus, PEAR,
Composer o simplemente descargar el archivo ".phar" e incluirlo desde su archivo PHP .
https://wiki.mikrotik.com/wiki/API_PHP_package 1/12
26/3/2018 Paquete API PHP - MikroTik Wiki
Note: The client should, in theory, work without any problems for large replies and commands, as well as any and all RouterBOARD devices, but has not
been extensively tested with such. Please report any such experiences (positive or negative ones) at the forums (http://forum.mikrotik.com/).
Documentation
Tutorials for this client are available in its GitHub Wiki (https://github.com/pear2/Net_RouterOS/wiki), including reference docs (https://pear2.github.io/
Net_RouterOS/Documentation/1.0.0b6/), which, if you have a smart PHP IDE like NetBeans, PhpStorm or similar, you can also view alongside its auto-
complete suggestions.
(Summary: Use the library as you like, no requirements or restrictions; If you modify the library and publish an application using that library, also
publish the modified library itself with the original credits preserved and under the same license)
Examples
All examples assume that you used Pyrus or PEAR for installation and have installed PEAR2_Autoload. Also, the router is assumed to be accessible
with a local IP to the device PHP runs from. The client itself could work without these restrictions - they are specified here for clarity and consistency.
https://wiki.mikrotik.com/wiki/API_PHP_package 2/12
26/3/2018 Paquete API PHP - MikroTik Wiki
Note: You should be able to replace "PEAR2/Autoload.php" with the path to the ".phar" file, and have everything "just work".
<?php
use PEAR2\Net\RouterOS;
require_once 'PEAR2/Autoload.php';
header('Content-Type: text/plain');
try {
$util = new RouterOS\Util($client = new RouterOS\Client('192.168.88.1', 'admin', 'password'));
<?php
use PEAR2\Net\RouterOS;
require_once 'PEAR2/Autoload.php';
https://wiki.mikrotik.com/wiki/API_PHP_package 3/12
26/3/2018 Paquete API PHP - MikroTik Wiki
</style>
</head>
<body>
<?php
try {
$util = new RouterOS\Util($client = new RouterOS\Client('192.168.88.1', 'admin', 'password'));
?><table>
<thead>
<tr>
<th>Time</th>
<th>Topics</th>
<th>Message</th>
</tr>
</thead>
<tbody>
<?php foreach ($util->setMenu('/log')->getAll() as $entry) { ?>
<tr>
<td><?php echo $entry('time'); ?></td>
<td>
<?php foreach (explode(',', $entry('topics')) as $topic) { ?>
<span><?php echo $topic; ?></span>
<?php } ?>
</td>
<td><?php echo $entry('message'); ?></td>
</tr>
<?php } ?>
</tbody>
</table>
<?php } catch (Exception $e) { ?>
<div>Unable to connect to RouterOS.</div>
<?php } ?>
</body>
</html>
<?php
use PEAR2\Net\RouterOS;
require_once 'PEAR2/Autoload.php';
//This is just one approach that allows you to create a multi purpose form,
//with ping being just one action.
if ($_GET['act'] === 'Ping' && isset($_GET['address'])) {
//Ping can run for unlimited time, but for PHP,
//we need to actually stop it at some point.
https://wiki.mikrotik.com/wiki/API_PHP_package 4/12
26/3/2018 Paquete API PHP - MikroTik Wiki
$pingRequest = new RouterOS\Request('/ping count=3');
$results = $client->sendSync($pingRequest->setArgument('address', $_GET['address']));
}
}
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Ping someone</title>
</head>
<body>
<div>
<form action="" method="get">
<ul>
<li>
<label for="address">Address:</label>
<input type="text" id="address" name="address" value="<?php
if (isset($_GET['address'])) {
echo htmlspecialchars($_GET['address']);
}
?>" />
</li>
<li>
<input type="submit" id="act" name="act" value="Ping" />
</li>
</ul>
</form>
</div>
<?php
if (isset($_GET['act'])) {//There's no need to execute this if the form was not submitted yet.
echo '<div>Results:<ul>';
foreach ($results as $result) {
//Add whatever you want displayed in this section.
echo '<li>Time:', $result('time'), '</li>';
}
echo '</ul></div>';
}
?>
</body>
</html>
Warning: As clarified earlier on this page, the web server needs to be within the local network of the hotspot. In this case, this is required to distinguish
hotspot users, which would otherwise be accessing the page with the same IP.
https://wiki.mikrotik.com/wiki/API_PHP_package 5/12
26/3/2018 Paquete API PHP - MikroTik Wiki
Warning: The web server too must be logged into the hotspot, in order to be able to access the router. You can create an IP binding for the web server
that is of type "bypassed", in order to avoid having it log in. See hotspot's manual page for details on how to create a binding.
<?php
use PEAR2\Net\RouterOS;
require_once 'PEAR2/Autoload.php';
$errors = array();
try {
//Adjust RouterOS IP, username and password accordingly.
$client = new RouterOS\Client('192.168.88.1', 'admin', 'password');
https://wiki.mikrotik.com/wiki/API_PHP_package 6/12
26/3/2018 Paquete API PHP - MikroTik Wiki
<?php if (!isset($hotspotUsername)) { ?>
<h1>We're sorry, but we can't change your password right now.
Please try again later</h1>
<?php } else { ?>
<h1>You are currently logged in as "<?php
echo $hotspotUsername;
?>"</h1>
The above approach for determining the currently logged in user requires for the web server to be inside the local hotspot network. In addition to being
inconvenient (in that you may not want to keep your web server in your network), the approach can also be somewhat error prone, in that users could
access the web server without being logged in, at which point they'd see the same error message as if the router was unavailable, except that it is, it's just
that it can't determine their username... Oh, and the IP binding requirement is a little annoying too.
The approach below detects the hotspot user's cookie, taking the username from it. If the server (or this PHP file at least) is not in a walled garden and
outside the hotspot network, users won't be able to access it without being logged in, ensuring a successful match.
https://wiki.mikrotik.com/wiki/API_PHP_package 7/12
26/3/2018 Paquete API PHP - MikroTik Wiki
1. Make sure the hotspot is available from a domain, even if it's one only the router itself knows, e.g. "router.local".
2. Add a DNS entry for the web server that is in a subdomain of the hotspot's domain, e.g. "panel.router.local".
3. Make sure the web server can actually respond to this domain. With IIS for example, a separate setting is required. With Apache, if you're using
ANY virtual hosts, you'll need to explicitly add this one too.
4. Place the PHP file so that the "path" component of the URL starts with "/login". This could be a dedicated folder at the web server root called
"login", or even just prefixing the name of the file, e.g. "loginChangePassword.php". This last part is required, because the cookies that hotspot
sets have "path=/login" in them, meaning the browser will only give the cookie if the path starts with "/login".
with
You'll notice the ID is available in a cookie called "loginID". The cookie's value is in decimal, and RouterOS internally stores the ID in hex, with "*" to
indicate type "id", which is why we do the conversion (and we use base_convert instead of dechex, because the ID can be up to 64 bits, not just 32 -
dechex's limit).
To prevent arbitrary people from resetting passwords, the script here requires users to provide two pieces of personal information: Email, and phone.
The latter is expected to be the "comment" for a user. If both pieces are correct, the password is set to a new password the user defines.
This scheme is used for the sake of simplicity. Depending on the rest of your setup (e.g. if you have a public trial account, or an SMS gateway...), you
may have better ways to deal with confirming the user's identity.
<?php
use PEAR2\Net\RouterOS;
require_once 'PEAR2/Autoload.php';
https://wiki.mikrotik.com/wiki/API_PHP_package 8/12
26/3/2018 Paquete API PHP - MikroTik Wiki
$errors = array();
//Check if the form was submitted. Don't bother with the checks if not.
if (isset($_POST['act'])) {
try {
//Adjust RouterOS IP, username and password accordingly.
$client = new RouterOS\Client('192.168.88.1', 'admin', 'password');
} catch(Exception $e) {
$errors[] = $e->getMessage();
}
if (empty($_POST['email'])) {
$errors[] = 'Email is required.';
}
if (empty($_POST['phone'])) {
$errors[] = 'Phone is required.';
}
if (empty($errors)) {
//Check if this is an imposter or not
$printRequest = new RouterOS\Request('/ip hotspot user print .proplist=.id');
$printRequest->setQuery(
RouterOS\Query::where('email', $_POST['email'])->andWhere('comment', $_POST['phone'])
);
$id = $client->sendSync($printRequest)->getProperty('.id');
if (null === $id) {
$errors[] = 'Email or phone does not match that of any user.';
}
}
if (!isset($_POST['password']) || !isset($_POST['password2'])) {
$errors[] = 'Setting a new password is required.';
}
if (empty($errors)) {
if ($_POST['password'] !== $_POST['password2']) {
$errors[] = 'Passwords do not match.';
} else {
//Here's the fun part - actually changing the password
$setRequest = new RouterOS\Request('/ip hotspot user set');
$client->sendSync($setRequest
->setArgument('password', $_POST['password'])
->setArgument('numbers', $id)
);
https://wiki.mikrotik.com/wiki/API_PHP_package 9/12
26/3/2018 Paquete API PHP - MikroTik Wiki
<head>
<title>Forgot your hotspot password?</title>
<style type="text/css">#errors {background-color: darkred; color: white;}</style>
</head>
<body>
<div>
<h1>You can reset your hotspot password by filling the following form.
You'll be redirected back to the login page once you're done</h1>
<?php if(!empty($errors)) { ?>
<div id="errors"><ul>
<?php foreach ($errors as $error) { ?>
<li><?php echo $error; ?></li>
<?php } ?>
</ul></div>
<?php } ?>
<form action="" method="post">
<ul>
<li>
<label for="email">Email:</label>
<input type="text" id="email" name="email" value="" />
</li>
<li>
<label for="phone">Phone:</label>
<input type="text" id="phone" name="phone" value="" />
</li>
<li>
<label for="password">New password:</label>
<input type="password" id="password" name="password" value="" />
</li>
<li>
<label for="password2">Confirm new password:</label>
<input type="password" id="password2" name="password2" value="" />
</li>
<li>
<input type="submit" id="act" name="act" value="Reset password" />
</li>
</ul>
</form>
</div>
</body>
</html>
The Wi-Fi password is set at the "default" security profile, which is predefined on RouterBOARD devices with Wi-Fi adapters. Adjust accordingly if not
using that profile.
Note that the provided alphabet below intentionally omits potentially ambiguous characters, such as "0" and "o".
https://wiki.mikrotik.com/wiki/API_PHP_package 10/12
26/3/2018 Paquete API PHP - MikroTik Wiki
<?php
use PEAR2\Net\RouterOS;
require_once 'PEAR2/Autoload.php';
try {
//Adjust RouterOS IP, username and password accordingly.
$client = new RouterOS\Client('192.168.88.1', 'admin', 'password');
MAC finder
Tired of asking your customers to tell you their MAC address (and go over the same "click here and..." instructions over and over again)? Well, using the
following script, you can now... switch the insructions to "go to this web page... by clicking here and...":
<?php
use PEAR2\Net\RouterOS;
require_once 'PEAR2/Autoload.php';
https://wiki.mikrotik.com/wiki/API_PHP_package 11/12
26/3/2018 Paquete API PHP - MikroTik Wiki
<body>
<h1>
<?php
try {
//Adjust RouterOS IP, username and password accordingly.
$client = new RouterOS\Client('192.168.88.1', 'admin', 'password');
See also
Protocolo API
Presentación de MUM BG 2014 ( Video en búlgaro (https://www.youtube.com/watch?v=vbkOBdJH2qw) , diapositivas en inglés (http://www.slid
eshare.net/boen_robot/the-better-php-api) y búlgaro (http://www.slideshare.net/boen_robot/the-better-php-api-bg) )
Categoría : API
Esta página fue editada por última vez el 27 de mayo de 2017, a las 15:14.
https://wiki.mikrotik.com/wiki/API_PHP_package 12/12