Write (send) data to Router OS
public write ( string $command, mixed $param2 = true ) : boolean | ||
$command | string | A string with the command to send |
$param2 | mixed | If we set an integer, the command will send this data as a "tag" If we set it to boolean true, the funcion will send the comand and finish If we set it to boolean false, the funcion will send the comand and wait for next command Default: true |
return | boolean | Return false if no command especified |
function collect_pppoe_users_api(&$host) { $rows = array(); $api = new RouterosAPI(); $api->debug = false; $rekey_array = array('host_id', 'name', 'index', 'userType', 'serverID', 'domain', 'bytesIn', 'bytesOut', 'packetsIn', 'packetsOut', 'curBytesIn', 'curBytesOut', 'curPacketsIn', 'curPacketsOut', 'prevBytesIn', 'prevBytesOut', 'prevPacketsIn', 'prevPacketsOut', 'present', 'last_seen'); // Put the queues into an array $users = array_rekey(db_fetch_assoc_prepared("SELECT \n\t\thost_id, '0' AS `index`, '1' AS userType, '0' AS serverID, SUBSTRING(name, 7) AS name, '' AS domain,\n\t\tBytesIn AS bytesIn, BytesOut AS bytesOut, PacketsIn as packetsIn, PacketsOut AS packetsOut,\n\t\tcurBytesIn, curBytesOut, curPacketsIn, curPacketsOut, \n\t\tprevBytesIn, prevBytesOut, prevPacketsIn, prevPacketsOut, present, last_seen\n\t\tFROM plugin_mikrotik_queues \n\t\tWHERE host_id = ? \n\t\tAND name LIKE 'PPPOE-%'", array($host['id'])), 'name', $rekey_array); $creds = db_fetch_row_prepared('SELECT * FROM plugin_mikrotik_credentials WHERE host_id = ?', array($host['id'])); $start = microtime(true); if (sizeof($creds)) { if ($api->connect($host['hostname'], $creds['user'], $creds['password'])) { $api->write('/ppp/active/getall'); $read = $api->read(false); $array = $api->parseResponse($read); $end = microtime(true); $sql = array(); cacti_log('MIKROTIK RouterOS API STATS: API Returned ' . sizeof($array) . ' PPPoe Users in ' . round($end - $start, 2) . ' seconds.', false, 'SYSTEM'); if (sizeof($array)) { foreach ($array as $row) { if (!isset($row['name'])) { continue; } $name = strtoupper($row['name']); if (isset($users[$name])) { $user = $users[$name]; $user['mac'] = $row['caller-id']; $user['ip'] = $row['address']; $user['connectTime'] = uptimeToSeconds($row['uptime']); $user['host_id'] = $host['id']; $user['radius'] = $row['radius'] == 'true' ? 1 : 0; $user['limitBytesIn'] = $row['limit-bytes-in']; $user['limitBytesOut'] = $row['limit-bytes-out']; $user['userType'] = 1; $sql[] = '(' . $user['host_id'] . ',' . $user['index'] . ',' . $user['userType'] . ',' . $user['serverID'] . ',' . db_qstr($user['name']) . ',' . db_qstr($user['domain']) . ',' . db_qstr($user['mac']) . ',' . db_qstr($user['ip']) . ',' . $user['connectTime'] . ',' . $user['bytesIn'] . ',' . $user['bytesOut'] . ',' . $user['packetsIn'] . ',' . $user['packetsOut'] . ',' . $user['curBytesIn'] . ',' . $user['curBytesOut'] . ',' . $user['curPacketsIn'] . ',' . $user['curPacketsOut'] . ',' . $user['prevBytesIn'] . ',' . $user['prevBytesOut'] . ',' . $user['prevPacketsIn'] . ',' . $user['prevPacketsOut'] . ',' . $user['limitBytesIn'] . ',' . $user['limitBytesOut'] . ',' . $user['radius'] . ',' . $user['present'] . ',' . db_qstr($user['last_seen']) . ')'; } } if (sizeof($sql)) { db_execute('INSERT INTO plugin_mikrotik_users (host_id, `index`, userType, serverID, name, domain, mac, ip, connectTime, bytesIn, bytesOut, packetsIn, packetsOut, curBytesIn, curBytesOut, curPacketsIn, curPacketsOut, prevBytesIn, prevBytesOut, prevPacketsIn, prevPacketsOut, limitBytesIn, limitBytesOut, radius, present, last_seen) VALUES ' . implode(', ', $sql) . ' ON DUPLICATE KEY UPDATE connectTime=VALUES(connectTime), bytesIn=VALUES(bytesIn), bytesOut=VALUES(bytesOut), packetsIn=VALUES(packetsIn), packetsOut=VALUES(packetsOut), curBytesIn=VALUES(curBytesIn), curBytesOut=VALUES(curBytesOut), curPacketsIn=VALUES(curPacketsIn), curPacketsOut=VALUES(curPacketsOut), prevBytesIn=VALUES(prevBytesIn), prevBytesOut=VALUES(prevBytesOut), prevPacketsIn=VALUES(prevPacketsIn), prevPacketsOut=VALUES(prevPacketsOut), limitBytesIn=VALUES(limitBytesIn), limitBytesOut=VALUES(limitBytesOut), radius=VALUES(radius), present=VALUES(present), last_seen=VALUES(last_seen)'); } } $idle_users = db_fetch_assoc_prepared('SELECT name FROM plugin_mikrotik_users WHERE last_seen < FROM_UNIXTIME(UNIX_TIMESTAMP() - ?) AND present=1 AND host_id = ?', array(read_config_option('mikrotik_queues_freq'), $host['id'])); db_execute_prepared('UPDATE IGNORE plugin_mikrotik_users SET bytesIn=0, bytesOut=0, packetsIn=0, packetsOut=0, connectTime=0, curBytesIn=0, curBytesOut=0, curPacketsIn=0, curPacketsOut=0, prevBytesIn=0, prevBytesOut=0, prevPacketsIn=0, prevPacketsOut=0, present=0 WHERE host_id = ? AND userType = 1 AND last_seen < FROM_UNIXTIME(UNIX_TIMESTAMP() - ?)', array($host['id'], read_config_option('mikrotik_queues_freq'))); $api->disconnect(); } else { cacti_log('ERROR:RouterOS @ ' . $host['description'] . ' Timed Out'); } } }
<?php require '../routeros_api.class.php'; $API = new RouterosAPI(); $API->debug = true; if ($API->connect('111.111.111.111', 'LOGIN', 'PASSWORD')) { $API->write('/interface/getall'); $READ = $API->read(); $ARRAY = $API->parse_response($READ); print_r($ARRAY); $API->disconnect(); }
<?php /* 3 step action 1) fetch all static dns hosts 2) remove all static dns hosts 3) add example host */ require '../routeros_api.class.php'; $API = new RouterosAPI(); if ($API->connect('111.111.111.111', 'LOGIN', 'PASSWORD')) { # Get all current hosts $API->write('/ip/dns/static/print'); $ips = $API->read(); # delete them all ! foreach ($ips as $num => $ip_data) { $API->write('/ip/dns/static/remove', false); $API->write("=.id=" . $ip_data[".id"], true); } #add some new $API->comm("/ip/dns/static/add", array("name" => "jefkeklak", "address" => "1.2.3.4", "ttl" => "1m")); #show me what you got $API->write('/ip/dns/static/print'); $ips = $API->read(); var_dump($ips); $API->disconnect(); }
<?php require '../routeros_api.class.php'; $API = new RouterosAPI(); $API->debug = true; if ($API->connect('111.111.111.111', 'LOGIN', 'PASSWORD')) { $API->write('/interface/wireless/registration-table/print', false); $API->write('=stats='); $READ = $API->read(); $ARRAY = $API->parse_response($READ); print_r($ARRAY); $API->disconnect(); }