<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Mikrotik.moscow [тема: Mikrotik API с PHP]</title>
		<link>http://mikrotik.moscow</link>
		<description>Новое в теме Mikrotik API с PHP форума RouterOS на сайте Mikrotik.moscow [mikrotik.moscow]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Tue, 18 Aug 2026 21:35:05 -0400</pubDate>
		<item>
			<title>Mikrotik API с PHP</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/88168-mikrotik-api-s-php/message424144">Mikrotik API с PHP</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Хорошо. Попробую объяснить на английском. API отлично подключается с моего ноутбука в локальной сети. Хотел бы запустить код с моего сайта на GoDaddy, но получаю: Попытка подключения №1 к telmovil.4dq.com:8728… Попытка подключения №2 к telmovil.4dq.com:8728… Попытка подключения №3 к telmovil.4dq.com:8728… Попытка подключения №4 к telmovil.4dq.com:8728… Попытка подключения №5 к telmovil.4dq.com:8728… Ошибка… Не получается подключиться. Спасибо за интерес и помощь. <br />
			<i>10.08.2013 13:03:00, juanmesa.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/88168-mikrotik-api-s-php/message424144</link>
			<guid>http://mikrotik.moscow/forum/forum57/88168-mikrotik-api-s-php/message424144</guid>
			<pubDate>Sat, 10 Aug 2013 13:03:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Mikrotik API с PHP</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/88168-mikrotik-api-s-php/message424143">Mikrotik API с PHP</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			По поводу того, что у вас несколько роутеров — пример в моём втором посте: в принципе, просто создайте новый объект Client для каждого роутера. Что касается access-list… извиняюсь, я раньше не заметил, что вы хотите работать только с MAC-адресами (я отвлёкся на то, что в вашей базе данных есть ещё и IP, поэтому сначала подумал про ARP). В базе данных указано, в каком роутере находится пользователь? Эти данные отличаются для каждого роутера или пользователь может подключаться с любого? Предположу, что данные разные для каждого роутера (имена пользователей могут повторяться, если они на разных роутерах), и что база это отслеживает с помощью отдельной таблицы с данными роутеров. Тогда схема может выглядеть примерно так:<br /><br />SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;<br />SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;<br />SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';<br /><br />-- -----------------------------------------------------<br />-- Таблица `routers`<br />-- -----------------------------------------------------<br />CREATE TABLE IF NOT EXISTS `routers` (<br /> &nbsp;`routerID` INT(11) NOT NULL AUTO_INCREMENT,<br /> &nbsp;`ip` VARCHAR(15) NOT NULL,<br /> &nbsp;`username` VARCHAR(255) NOT NULL,<br /> &nbsp;`password` VARCHAR(255) NOT NULL,<br /> &nbsp;PRIMARY KEY (`routerID`)<br />)<br />ENGINE=InnoDB<br />DEFAULT CHARSET=utf8;<br /><br />SHOW WARNINGS;<br /><br />-- -----------------------------------------------------<br />-- Таблица `clients`<br />-- -----------------------------------------------------<br />CREATE TABLE IF NOT EXISTS `clients` (<br /> &nbsp;`ip` VARCHAR(15) NOT NULL,<br /> &nbsp;`mac` CHAR(17) NOT NULL,<br /> &nbsp;`routerID` INT(11) NOT NULL,<br /> &nbsp;`username` VARCHAR(255) NULL DEFAULT NULL,<br /> &nbsp;PRIMARY KEY (`ip`, `mac`, `routerID`),<br /> &nbsp;INDEX `fk_clients_routers` (`routerID` ASC),<br /> &nbsp;CONSTRAINT `fk_clients_routers`<br /> &nbsp; &nbsp;FOREIGN KEY (`routerID`)<br /> &nbsp; &nbsp;REFERENCES `router`.`routers` (`routerID`)<br /> &nbsp; &nbsp;ON DELETE NO ACTION<br /> &nbsp; &nbsp;ON UPDATE CASCADE<br />)<br />ENGINE=InnoDB<br />DEFAULT CHARSET=utf8;<br /><br />SHOW WARNINGS;<br /><br />SET SQL_MODE=@OLD_SQL_MODE;<br />SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;<br />SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;<br /><br />Теперь, поскольку структура кода начинала сходить с ума, я выделил большую часть прежнего кода в отдельный класс. Думаю, мог бы сделать это и лучше, но сейчас главная задача — привести в порядок то, что раньше было анонимной функцией. Остальная часть кода практически не изменилась, за исключением всего, что связано с IP:<br /><br />&lt;?php<br />namespace PEAR2\Net\RouterOS;<br />require_once 'PEAR2/Net/RouterOS/Autoload.php';<br /><br />// Подключение к MySQL.<br />$mysqli = new \mysqli('127.0.0.1', 'root', '', 'db');<br /><br />class ResponseProcessor {<br /> &nbsp; &nbsp;protected $mysqli;<br /> &nbsp; &nbsp;protected $stmt;<br /> &nbsp; &nbsp;protected $params = array('routerID' =&gt; null, 'mac' =&gt; null);<br /> &nbsp; &nbsp;protected $removalIDs = '';<br /> &nbsp; &nbsp;protected $existingMACs = '';<br /><br /> &nbsp; &nbsp;public function __construct(\mysqli $mysqli) {<br /> &nbsp; &nbsp; &nbsp; &nbsp;$this-&gt;mysqli = $mysqli;<br /> &nbsp; &nbsp; &nbsp; &nbsp;$this-&gt;stmt = $mysqli-&gt;prepare('SELECT `mac` FROM `clients` WHERE `routerID` = ? AND `mac` = ?');<br /> &nbsp; &nbsp; &nbsp; &nbsp;$this-&gt;stmt-&gt;bind_param('is', $this-&gt;params['routerID'], $this-&gt;params['mac']);<br /> &nbsp; &nbsp;}<br /><br /> &nbsp; &nbsp;public function setRouterID($id) {<br /> &nbsp; &nbsp; &nbsp; &nbsp;$this-&gt;params['routerID'] = (int)$id;<br /> &nbsp; &nbsp; &nbsp; &nbsp;$this-&gt;removalIDs = $this-&gt;existingMACs = '';<br /> &nbsp; &nbsp;}<br /><br /> &nbsp; &nbsp;public function process(Response $response) {<br /> &nbsp; &nbsp; &nbsp; &nbsp;if ($response-&gt;getType() === Response::TYPE_DATA) {<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$this-&gt;params['mac'] = $response-&gt;getArgument('mac-address');<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$this-&gt;stmt-&gt;execute();<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if ($this-&gt;stmt-&gt;get_result()-&gt;num_rows) {<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$this-&gt;existingMACs .= "'" . $this-&gt;mysqli-&gt;real_escape_string($response-&gt;getArgument('mac-address')) . "',";<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} else {<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$this-&gt;removalIDs .= $response-&gt;getArgument('.id') . ',';<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br /> &nbsp; &nbsp; &nbsp; &nbsp;}<br /> &nbsp; &nbsp;}<br /><br /> &nbsp; &nbsp;public function getRemovalIDs() {<br /> &nbsp; &nbsp; &nbsp; &nbsp;return rtrim($this-&gt;removalIDs, ',');<br /> &nbsp; &nbsp;}<br /><br /> &nbsp; &nbsp;public function getAllNotInRouter() {<br /> &nbsp; &nbsp; &nbsp; &nbsp;return $this-&gt;mysqli-&gt;query('SELECT `mac` FROM `clients` WHERE `routerID` = ' . $this-&gt;params['routerID'] . ' AND `mac` NOT IN (' . rtrim($this-&gt;existingMACs, ',') . ')');<br /> &nbsp; &nbsp;}<br />}<br /><br />$printRequest = new Request('/interface wireless access-list print .proplist=.id,mac-address');<br />$printRequest-&gt;setTag('p');<br /><br />$removeRequest = new Request('/interface wireless access-list remove');<br />$addRequest = new Request('/interface wireless access-list add');<br /><br />$processor = new ResponseProcessor($mysqli);<br />$routers = $mysqli-&gt;query('SELECT `routerID`, `ip`, `username`, `password` FROM `routers`');<br />while ($router = $routers-&gt;fetch_assoc()) {<br /> &nbsp; &nbsp;$client = new Client($router['ip'], $router['username'], $router['password']);<br /> &nbsp; &nbsp;$processor-&gt;setRouterID($router['routerID']);<br /><br /> &nbsp; &nbsp;// Определяем, что делать с каждой записью. Такой подход позволяет минимизировать потребление памяти на этом этапе.<br /> &nbsp; &nbsp;$client-&gt;sendAsync($printRequest, array($processor, 'process'));<br /> &nbsp; &nbsp;$client-&gt;loop();<br /><br /> &nbsp; &nbsp;// Удаляем все записи, которых нет в базе.<br /> &nbsp; &nbsp;$client-&gt;sendSync($removeRequest-&gt;setArgument('numbers', $processor-&gt;getRemovalIDs()));<br /><br /> &nbsp; &nbsp;// Получаем все записи, которые есть в базе, но отсутствуют в роутере.<br /> &nbsp; &nbsp;$finalSelectResult = $processor-&gt;getAllNotInRouter();<br /><br /> &nbsp; &nbsp;// Добавляем все такие записи в роутеры.<br /> &nbsp; &nbsp;for ($i = 0; $row = $finalSelectResult-&gt;fetch_assoc(); ++$i) {<br /> &nbsp; &nbsp; &nbsp; &nbsp;$client-&gt;sendAsync(<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$addRequest<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-&gt;setArgument('mac-address', $row['mac'])<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-&gt;setTag($i)<br /> &nbsp; &nbsp; &nbsp; &nbsp;);<br /> &nbsp; &nbsp;}<br /> &nbsp; &nbsp;$client-&gt;loop();<br />}<br /><br />Обратите внимание, что в итоге каждый MAC-адрес добавляется на “все” беспроводные интерфейсы, а не на конкретный. Если хотите назначать конкретный интерфейс, нужно либо хранить интерфейс в базе вместе с MAC-адресом, либо использовать что-то вроде функции PEAR Net_IPv4::ipInNetwork(), чтобы автоматически определить интерфейс, исходя из IP пользователя и сетевых адресов AP на текущем роутере. Первый вариант требует больше места в базе (2000 пользователей минимум по 5 байт на пользователя — это минимум 10 Кб, и рост зависит от длины имен интерфейсов), а второй — занимает некоторое время (каждую добавляемую запись нужно проверить, а перед этим сделать дополнительный запрос для получения всех сетевых адресов AP; в среднем это несколько миллисекунд накладных расходов, в худшем случае полсекунды, при условии, что сеть в порядке и количество записей умеренное). Что бы вы предпочли пожертвовать? <br />
			<i>02.07.2012 11:16:00, boen_robot.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/88168-mikrotik-api-s-php/message424143</link>
			<guid>http://mikrotik.moscow/forum/forum57/88168-mikrotik-api-s-php/message424143</guid>
			<pubDate>Mon, 02 Jul 2012 11:16:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Mikrotik API с PHP</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/88168-mikrotik-api-s-php/message424142">Mikrotik API с PHP</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Привет, boen_robot, спасибо за ответ, но что если у меня будет больше клиентов? У нас веб-сервер и MySQL сервер на одном сервере, где около 2000 IP-клиентов и примерно 200 IP-адресов MikroTik. Твой скрипт для ARP-листа, можешь написать скрипт для Wireless - access list? Большое спасибо! <br />
			<i>02.07.2012 07:37:00, P3T3R.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/88168-mikrotik-api-s-php/message424142</link>
			<guid>http://mikrotik.moscow/forum/forum57/88168-mikrotik-api-s-php/message424142</guid>
			<pubDate>Mon, 02 Jul 2012 07:37:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Mikrotik API с PHP</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/88168-mikrotik-api-s-php/message424141">Mikrotik API с PHP</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			@P3T3R Есть несколько способов подойти к решению, всё зависит от того, где вы хотите сосредоточить основную нагрузку — на роутере, веб-сервере или сервере базы данных? Есть ли проблемы с памятью где-то? Как выглядит таблица в БД? Мы вообще про ARP-лист говорим? Предположу, что память на веб-сервере не самый большой вопрос (хотя она всё равно ограничена, пусть даже искусственно через php.ini), и что сетевые соединения с роутером дороже, чем с сервером базы данных, как это обычно и бывает (особенно если БД работает на той же машине, что и веб-сервер). Также предполагаю следующую структуру таблицы БД:<br /><br />CREATE TABLE `arp` (<br /> &nbsp;`ip` varchar(15) NOT NULL,<br /> &nbsp;`mac` char(17) NOT NULL,<br /> &nbsp;PRIMARY KEY (`ip`,`mac`)<br />) ENGINE=InnoDB<br /><br />Сначала сделайте один запрос на вывод к роутеру, чтобы получить все записи. Затем для каждой записи из списка проверьте, есть ли она в базе, просто сделав запрос и посмотрев, есть ли результат. Если записи нет — добавьте её ID в список для удаления. Если есть — добавьте пару IP/MAC в строку, которая позже сформирует SQL-запрос. После обработки всех записей сделайте один запрос на удаление к роутеру со всеми собранными ID, выполните SQL-запрос, который вернёт все записи, кроме тех, что собраны, и отправьте запрос на добавление каждой из них.<br /><br />Если не возражаете, приведу пример на своём клиенте, но вы можете переписать это на класс Дениса, если нужно:<br /><br />&lt;?php<br />namespace PEAR2\Net\RouterOS;<br />require_once 'PEAR2/Net/RouterOS/Autoload.php';<br /><br />//Подключаемся и к роутеру, и к MySQL.<br />$client = new Client('10.30.99.31', 'admin', 'password');<br />$mysqli = new \mysqli('127.0.0.1', 'root', '', 'db');<br /><br />//Для скорости используем подготовленные выражения.<br />$selectStatement = array(<br /> &nbsp;'stmt' =&gt; $mysqli-&gt;prepare('SELECT `ip`, `mac` FROM `arp` WHERE `ip`= ? AND `mac` = ?'),<br /> &nbsp;'params' =&gt; array('ip' =&gt; null, 'mac' =&gt; null)<br />);<br />$selectStatement-&gt;bind_param('ss', $selectStatement['params']['ip'], $selectStatement['params']['mac']);<br /><br />//Переменные для дальнейшего использования.<br />$removalIDs = '';<br />$finalSelectQueryFilters = array();<br /><br />//Делаем запрос, который вернёт все записи ARP... без комментариев.<br />$printRequest = new Request('/ip arp print .proplist=.id,address,mac-address');<br />$printRequest-&gt;setTag('p');<br /><br />//Определяем, что делать с каждой записью. Такой подход минимизирует потребление памяти на этом этапе.<br />$client-&gt;sendAsync($printRequest,<br /> &nbsp;function ($response) use ($mysqli, &$selectStatement, &$removalIDs, &$finalSelectQueryFilters) {<br /> &nbsp; &nbsp;if ($response-&gt;getType() === Response::TYPE_DATA) {<br /> &nbsp; &nbsp; &nbsp;$selectStatement['params']['ip'] = $response-&gt;getArgument('address');<br /> &nbsp; &nbsp; &nbsp;$selectStatement['params']['mac'] = $response-&gt;getArgument('mac-address');<br /> &nbsp; &nbsp; &nbsp;$selectStatement['stmt']-&gt;execute();<br /> &nbsp; &nbsp; &nbsp;if ($selectStatement['stmt']-&gt;get_result()-&gt;num_rows) {<br /> &nbsp; &nbsp; &nbsp; &nbsp;$finalSelectQueryFilters[] =<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"(`ip` = '" . $mysqli-&gt;real_escape_string($response-&gt;getArgument('address')) .<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"' AND `mac` = '" . $mysqli-&gt;real_escape_string($response-&gt;getArgument('mac-address')) .<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"')";<br /> &nbsp; &nbsp; &nbsp;} else {<br /> &nbsp; &nbsp; &nbsp; &nbsp;$removalIDs .= $response-&gt;getArgument('.id') . ',';<br /> &nbsp; &nbsp; &nbsp;}<br /> &nbsp; &nbsp;}<br /> &nbsp;}<br />);<br />$client-&gt;loop();<br /><br />//$removalIDs и $finalSelectQueryFilters теперь заполнены. Используем их.<br /><br />//Удаляем все записи, которых нет в базе.<br />$removeRequest = new Request('/ip arp remove');<br />$removeRequest-&gt;setArgument('numbers', rtrim($removalIDs, ','));<br />$client-&gt;sendSync($removeRequest);<br /><br />//Получаем все записи, которые есть в базе, но отсутствуют в роутере.<br />$finalSelectResult = $mysqli-&gt;query('SELECT `ip`, `mac` FROM `arp` WHERE NOT (' . implode(' OR ', $finalSelectQueryFilters) . ')');<br /><br />//Добавляем их в роутер.<br />$addRequest = new Request('/ip arp add');<br />for ($i = 0; $row = $finalSelectResult-&gt;fetch_assoc(); ++$i) {<br /> &nbsp;$client-&gt;sendAsync(<br /> &nbsp; &nbsp;$addRequest<br /> &nbsp; &nbsp; &nbsp;-&gt;setArgument('address', $row['ip'])<br /> &nbsp; &nbsp; &nbsp;-&gt;setArgument('mac-address', $row['mac'])<br /> &nbsp; &nbsp; &nbsp;-&gt;setTag($i)<br /> &nbsp;);<br />}<br />$client-&gt;loop();<br /><br />Кстати, всё было бы гораздо проще, если вы просто добавляли записи в роутер одновременно с добавлением в базу, и удаляли из роутера при удалении из базы. <br />
			<i>22.06.2012 12:39:00, boen_robot.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/88168-mikrotik-api-s-php/message424141</link>
			<guid>http://mikrotik.moscow/forum/forum57/88168-mikrotik-api-s-php/message424141</guid>
			<pubDate>Fri, 22 Jun 2012 12:39:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Mikrotik API с PHP</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/88168-mikrotik-api-s-php/message424140">Mikrotik API с PHP</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Привет, boen_robot, у меня проблема с address list в Mikrotik. &nbsp;<br /><img class="lazyload "  src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="/upload/forum/mikrotik/62c033ec80093c0e5009e17fb615e9583baca355.jpeg" alt="Пользователь добавил изображение" border="0" /> &nbsp;<br /><br />У нас три AP с тремя IP-адресами в одном Mikrotik. У каждого AP есть свой IP: &nbsp;<br />AP 1 – 10.30.31.1 &nbsp;<br />AP 2 – 10.30.32.1 &nbsp;<br />AP 3 – 10.30.33.1 &nbsp;<br /><br />У нас есть база данных MySQL, где хранятся IP и MAC адреса наших клиентов. &nbsp;<br /><br />Как написать PHP-скрипт, который будет: &nbsp;<br />- Если MAC адрес есть в MySQL и в Mikrotik → ничего не делать &nbsp;<br />- Если MAC адрес есть в MySQL, но нет в Mikrotik → добавить MAC адрес в address list &nbsp;<br />- Если MAC адреса нет в MySQL, но он есть в Mikrotik → удалить MAC адрес из address list &nbsp;<br /><br />Спасибо! <br />
			<i>22.06.2012 07:15:00, P3T3R.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/88168-mikrotik-api-s-php/message424140</link>
			<guid>http://mikrotik.moscow/forum/forum57/88168-mikrotik-api-s-php/message424140</guid>
			<pubDate>Fri, 22 Jun 2012 07:15:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Mikrotik API с PHP</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/88168-mikrotik-api-s-php/message424139">Mikrotik API с PHP</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			@juanmesa Пожалуйста, пиши по-английски. Я не понимаю… Испанский, как я полагаю. В любом случае, посмотрев лог, думаю, понял в чём у тебя проблема. Наверное, у тебя в коде что-то типа: $API-&gt;comm('/ip route rule add src-address=10.1.0.99 action=unreachable'); или может быть $API-&gt;write('/ip route rule add src-address=10.1.0.99 action=unreachable', false); В любом случае, с классом Дениса так делать нельзя. Судя по логу, раньше в твоём коде ты это делаешь правильно. Удали все части кода, которые похожи на приведённые примеры, и используй тот вариант, который работал раньше. <br />
			<i>21.06.2012 13:39:00, boen_robot.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/88168-mikrotik-api-s-php/message424139</link>
			<guid>http://mikrotik.moscow/forum/forum57/88168-mikrotik-api-s-php/message424139</guid>
			<pubDate>Thu, 21 Jun 2012 13:39:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Mikrotik API с PHP</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/88168-mikrotik-api-s-php/message424138">Mikrotik API с PHP</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Добрый день. Я пытаюсь работать с классом php для Mikrotik, но не удалось заставить его работать на арендованном хостинге (Godaddy). Зато с моего ноутбука (с Appserv), подключенного к Mikrotik, всё работает. Буду благодарен за помощь. У меня Routerboard RB1100.<br /><br />С хостинга:<br />Попытка подключения #1 к telmovil.4dq.com:8728 …<br />Попытка подключения #2 к telmovil.4dq.com:8728 …<br />Попытка подключения #3 к telmovil.4dq.com:8728 …<br />Попытка подключения #4 к telmovil.4dq.com:8728 …<br />Попытка подключения #5 к telmovil.4dq.com:8728 …<br />Ошибка…<br /><br />С моего ноутбука с Appserv:<br />Попытка подключения #1 к telmovil.4dq.com:8728 …<br />&lt;&lt;&lt; [6] /login &gt;&gt;&gt;<br />[5/5] байт прочитано.<br />&gt;&gt;&gt; [5, 39]!done<br />&gt;&gt;&gt; [37/37] байт прочитано.<br />&gt;&gt;&gt; [37, 1]=ret=bfba4d9674433881af0c85abe446e063<br />&lt;&lt;&lt; [6] /login<br />&lt;&lt;&lt; [11] =name=xxxxx<br />&lt;&lt;&lt; [44] =response=006245a8313d081bd97f2679c2ab870e53<br />&gt;&gt;&gt; [5/5] байт прочитано.<br />[5, 1]!done<br />Подключено…<br />&lt;&lt;&lt; [18] /ip/route/rule/add<br />&lt;&lt;&lt; [22] =src-address=10.1.0.99<br />&lt;&lt;&lt; [19] =action=unreachable<br />&lt;&lt;&lt; [27] =comment=adicionado por api<br />&gt;&gt;&gt; [5/5] байт прочитано.<br />&gt;&gt;&gt; [5, 10]!done<br />&gt;&gt;&gt; [8/8] байт прочитано.<br />&gt;&gt;&gt; [8, 1]=ret=*49<br />&lt;&lt;&lt; [59] /ip route rule add src-address=10.1.0.99 action=unreachable<br />Отключено…<br /><br />Спасибо. <br />
			<i>20.06.2012 13:36:00, juanmesa.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/88168-mikrotik-api-s-php/message424138</link>
			<guid>http://mikrotik.moscow/forum/forum57/88168-mikrotik-api-s-php/message424138</guid>
			<pubDate>Wed, 20 Jun 2012 13:36:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Mikrotik API с PHP</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/88168-mikrotik-api-s-php/message424137">Mikrotik API с PHP</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Привет, у меня небольшая проблема с моим php-скриптом. Вот сам скрипт: &nbsp;<br />&lt;?php &nbsp;<br />require('config.php'); &nbsp;<br />require('routeros_api.class.php'); &nbsp;<br /><br />$API = new routeros_api(); &nbsp;<br />$API-&gt;debug = true; &nbsp;<br />$dediny = array( &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;array("10.30.1."), &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;array("10.30.2."), &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;array("10.30.31."), &nbsp;<br />); &nbsp;<br />$ip = array( &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;array("10.30.1.1", "Peter123", "xxx"), &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;array("10.30.2.1", "Peter123", "xxx"), &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;array("10.30.31.1", "Peter123", "xxx"), &nbsp; &nbsp;<br />); &nbsp; <br /><br />foreach($ip as $mikrotik){ &nbsp;<br /> &nbsp;foreach($dediny as $dedina){ &nbsp;<br /> &nbsp; if ($API-&gt;connect($mikrotik[0], $mikrotik[1], $mikrotik[2])) {  <br /> &nbsp; &nbsp; &nbsp;$query = mysql_query("SELECT usermac, userip, username FROM sl_internet WHERE userip like '.$dedina[0].%' and usermac IS NOT NULL");  <br /> &nbsp; &nbsp; &nbsp;while($row = mysql_fetch_array($query)){ &nbsp; &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp;$usermac &nbsp;= $row['usermac'];  <br /> &nbsp; &nbsp; &nbsp; &nbsp;$username = $row['username'];  <br /> &nbsp; &nbsp; &nbsp; &nbsp;$uzivatel = strtr($username, ' ./áäčďéěëíµňôóöŕřšťúůüýžÁÄČĎÉĚËÍĄŇÓÖÔŘŔŠŤÚŮÜÝŽ', '___aacdeeeilnooorrstuuuyzaacdeeelinooorrstuuuyz'); &nbsp; &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp;$API-&gt;write("/interface/wireless/access-list/add", false); &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp;$API-&gt;write("=forwarding=no", false); &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp;$API-&gt;write("=authentication=yes", false); &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp;$API-&gt;write("=interface=all", false); &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp;$API-&gt;write("=mac-address=". $usermac ."", false); &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp;$API-&gt;write("=comment=". $uzivatel .""); &nbsp;<br /><br /> &nbsp; &nbsp; &nbsp; &nbsp;$READ = $API-&gt;read(false); &nbsp;<br /> &nbsp; &nbsp; &nbsp; &nbsp;$ARRAY = $API-&gt;parse_response($READ); &nbsp;<br /><br /> &nbsp; &nbsp; &nbsp; &nbsp;print_r($ARRAY); &nbsp;<br /><br /> &nbsp; &nbsp; &nbsp; &nbsp;$API-&gt;disconnect(); &nbsp;<br /> &nbsp; &nbsp; &nbsp;} &nbsp; &nbsp;<br /> &nbsp; &nbsp;} &nbsp;<br /> &nbsp;} &nbsp;<br />} &nbsp; &nbsp; <br /><br />?&gt; &nbsp;<br />Моя проблема: пользователь входит в Mikrotik, но MAC-адрес не записывается в список адресов. В чём может быть проблема? &nbsp;<br /><br />Вот сообщение после запуска скрипта: &nbsp;<br /><br />Пытался №1 к 10.30.1.1:8728... &lt;&lt;&lt; [6] /login &gt;&gt;&gt; [5/5] байт прочитано. &gt;&gt;&gt; [5, 39]!done &gt;&gt;&gt; [37/37] байт прочитано. &gt;&gt;&gt; [37, 1]=ret=32a065fe9daba77f3c5131fe9294b93e &lt;&lt;&lt; [6] /login &lt;&lt;&lt; [14] =name=Peter123 &lt;&lt;&lt; [44] =response=001474e0d360b775f9f923580ea95b6531 &gt;&gt;&gt; [5/5] байт прочитано. &gt;&gt;&gt; [5, 1]!done Подключено...  <br />Пытался №1 к 10.30.1.1:8728... &lt;&lt;&lt; [6] /login &gt;&gt;&gt; [5/5] байт прочитано. &gt;&gt;&gt; [5, 39]!done &gt;&gt;&gt; [37/37] байт прочитано. &gt;&gt;&gt; [37, 1]=ret=7206547048eec1e0534e37022bb0bfde &lt;&lt;&lt; [6] /login &lt;&lt;&lt; [14] =name=Peter123 &lt;&lt;&lt; [44] =response=00a340b63c0a50704f74e02f67a37dbfbd &gt;&gt;&gt; [5/5] байт прочитано. &gt;&gt;&gt; [5, 1]!done Подключено...  <br />Пытался №1 к 10.30.1.1:8728... &lt;&lt;&lt; [6] /login &gt;&gt;&gt; [5/5] байт прочитано. &gt;&gt;&gt; [5, 39]!done &gt;&gt;&gt; [37/37] байт прочитано. &gt;&gt;&gt; [37, 1]=ret=44c48f9f023aca98e8ded349e2f1170b &lt;&lt;&lt; [6] /login &lt;&lt;&lt; [14] =name=Peter123 &lt;&lt;&lt; [44] =response=002c5d6607a10717b1451a29e364d3631c &gt;&gt;&gt; [5/5] байт прочитано. &gt;&gt;&gt; [5, 1]!done Подключено...  <br />Пытался №1 к 10.30.2.1:8728... &lt;&lt;&lt; [6] /login &gt;&gt;&gt; [5/5] байт прочитано. &gt;&gt;&gt; [5, 39]!done &gt;&gt;&gt; [37/37] байт прочитано. &gt;&gt;&gt; [37, 1]=ret=1a3eea89741b8af595f5cdd05ad9bdb8 &lt;&lt;&lt; [6] /login &lt;&lt;&lt; [14] =name=Peter123 &lt;&lt;&lt; [44] =response=00b7ed1b0084a8444e5a05fc6740907a94 &gt;&gt;&gt; [5/5] байт прочитано. &gt;&gt;&gt; [5, 1]!done Подключено...  <br />Пытался №1 к 10.30.2.1:8728... &lt;&lt;&lt; [6] /login &gt;&gt;&gt; [5/5] байт прочитано. &gt;&gt;&gt; [5, 39]!done &gt;&gt;&gt; [37/37] байт прочитано. &gt;&gt;&gt; [37, 1]=ret=90012ab87e8fdc28939546dd09d060e2 &lt;&lt;&lt; [6] /login &lt;&lt;&lt; [14] =name=Peter123 &lt;&lt;&lt; [44] =response=00ffd2da3ec2cc85f75b61bd9814f2d654 &gt;&gt;&gt; [5/5] байт прочитано. &gt;&gt;&gt; [5, 1]!done Подключено...  <br />Пытался №1 к 10.30.2.1:8728... &lt;&lt;&lt; [6] /login &gt;&gt;&gt; [5/5] байт прочитано. &gt;&gt;&gt; [5, 39]!done &gt;&gt;&gt; [37/37] байт прочитано. &gt;&gt;&gt; [37, 1]=ret=027a28f68da888643ea623c12f7f7b1a &lt;&lt;&lt; [6] /login &lt;&lt;&lt; [14] =name=Peter123 &lt;&lt;&lt; [44] =response=00088dc34835b6b70c767ce468bdde5a39 &gt;&gt;&gt; [5/5] байт прочитано. &gt;&gt;&gt; [5, 1]!done Подключено...  <br />Пытался №1 к 10.30.31.1:8728... &lt;&lt;&lt; [6] /login &gt;&gt;&gt; [5/5] байт прочитано. &gt;&gt;&gt; [5, 39]!done &gt;&gt;&gt; [37/37] байт прочитано. &gt;&gt;&gt; [37, 1]=ret=a9da030586223ef96a396d27e6dbcd3c &lt;&lt;&lt; [6] /login &lt;&lt;&lt; [14] =name=Peter123 &lt;&lt;&lt; [44] =response=00891ba7cc96c3d64c45020fb015f2f88e &gt;&gt;&gt; [5/5] байт прочитано. &gt;&gt;&gt; [5, 1]!done Подключено...  <br />Пытался №1 к 10.30.31.1:8728... Ошибка... &nbsp;<br />Пытался №1 к 10.30.31.1:8728... &lt;&lt;&lt; [6] /login &gt;&gt;&gt; [5/5] байт прочитано. &gt;&gt;&gt; [5, 39]!done &gt;&gt;&gt; [37/37] байт прочитано. &gt;&gt;&gt; [37, 1]=ret=c5d47c20ed608b3c88512315972621bc &lt;&lt;&lt; [6] /login &lt;&lt;&lt; [14] =name=Peter123 &lt;&lt;&lt; [44] =response=000c3912efd857b8ff542e3f86c69698ef &gt;&gt;&gt; [5/5] байт прочитано. &gt;&gt;&gt; [5, 1]!done Подключено... <br />
			<i>03.02.2012 15:54:00, P3T3R.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/88168-mikrotik-api-s-php/message424137</link>
			<guid>http://mikrotik.moscow/forum/forum57/88168-mikrotik-api-s-php/message424137</guid>
			<pubDate>Fri, 03 Feb 2012 15:54:00 -0500</pubDate>
			<category>RouterOS</category>
		</item>
	</channel>
</rss>
