Привет, я работаю над простым PHP-скриптом для изменения пароля пользователя хотспота. Простой пример был бы очень кстати. В данный момент я делаю это с помощью BASH-скрипта на сервере Linux. Я почти всегда получаю ошибку STD Timeout при изменении пароля и не понимаю, почему это происходит. Если кто-то сможет объяснить мне, что такое ошибка STD Timeout, буду очень благодарен. Жду положительного ответа.
Смените пароль на hotspot с помощью PHP API
Смените пароль на hotspot с помощью PHP API, RouterOS
|
21.01.2010 19:19:00
|
|
|
|
|
|
26.02.2010 21:15:00
Можешь выложить свой PHP-код, который у тебя есть на данный момент? Как думаешь, будет ли проще сделать это на PERL? -С уважением, DesertAdmin
|
|
|
|
|
|
17.05.2010 08:00:00
Вы пытаетесь разместить эти страницы на маршрутизаторе? Если да, то это не сработает. Вам нужно разместить эти страницы на http-сервере, поддерживающем php, а маршрутизатор не является таковым.
|
|
|
|
|
|
17.05.2010 11:18:00
Спасибо за информацию, я осознал свою ошибку. Теперь я сохранил login.html и status.html на роутере, затем создал ссылку на status.html для смены пароля, которая ведет на changepass.html, а она уже перенаправляет пользователя на changepass.php и hspot1.php на внешнем сервере с работающим wampserver 2i. IP-адрес роутера — 172.16.1.1, пользователь admin и без пароля. Я вошел в систему с пользователем "admin", паролем "admin", и хочу изменить пароль на test. Когда я запускаю код hspot.php, получаю следующий вывод с включенной отладкой:
Connection attempt #1 to 172.16.1.1:8728... <<< [6] /login >>> [5, 39] !done >>> [37, 1] =ret=42aa9f5618bbc947415e1a680ee3b2b7 <<< [6] /login <<< [11] =name=admin <<< [44] =response=00b9325a654b8954ac191945f299c4c093 >>> [5, 1] !done Connected... <<< [23] /ip/hotspot/user/getall <<< [21] /ip/hotspot/user/set/ <<< [10] =.id=admin <<< [14] =password=test >>> [3, 189] !re >>> [7, 181] =.id=*1 <<< [11, 169] =name=admin <<< [15, 153] =password=admin <<< [16, 136] =profile=default <<< [16, 119] =uptime=1h30m12s <<< [18, 100] =bytes-in=21293900 <<< [19, 80] =bytes-out=22015929 <<< [17, 62] =packets-in=26375 <<< [18, 43] =packets-out=21254 <<< [11, 31] =dynamic=no <<< [9, 21] =comment= <<< [12, 8] =disabled=no >>> [5, 1] !done Disconnected... Пароль успешно изменен! Но на самом деле пароль не изменился. У меня включен API с разрешенным диапазоном адресов 172.16.1.0/24. Код для changepass.php: <?php $username = $_POST['user']; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Untitled Document</title> </head> <body>
<!-- document.hotspot.myusername.focus(); //--> </script> </body> </html> Теперь я в тупике, не знаю, что делать. |
||||||||||||||||||
|
|
|
|
17.05.2010 16:55:00
Что ж, API предназначен для изменения имени пользователя в месте ".id=*1", я так полагаю. Так что вам, возможно, нужно изменить значение .id на соответствующее имя пользователя. Вам может понадобиться найти правильную позицию id и добавить 1 (я могу ошибаться). Думаю, это и есть вся проблема. Конечно, кажется, что вы используете маршрутизатор с кодом хотспота. -С уважением, DesertAdmin
|
|
|
|
|
|
17.05.2010 21:36:00
ок. я изменил строку $API->write('=.id='.$myusername,false); на $API->write('=.id=*1,false); потому что из вывода я вижу, что .id имеет значение *1. Поведение осталось тем же, как будто пароль был изменен, но при входе в роутер видно другое. В данный момент я использую v3.13 routeros, но подозревал, что может быть ошибка, поэтому обновил до 3.22, и когда запускаю тот же код, получаю Connection attempt #1 to 172.16.1.1:8728... <<< [6] /login >>> [5, 39] !done >>> [37, 1] =ret=3c459371715010e0476c6d91d2995876 <<< [6] /login <<< [11] =name=admin <<< [44] =response=00393c8c29e1e089dbbf83a720fc58bcc8 >>> [5, 1] !done Connected... <<< [23] /ip/hotspot/user/getall <<< [21] /ip/hotspot/user/set/ <<< [10] =.id=admin <<< [14] =password=test >>> [5, 35] !trap >>> [26, 8] =message=unknown parameter >>> [5, 1] !done Disconnected... Password Changed successfully! о каком неизвестном параметре идет речь? как мне это идентифицировать, я так запутался, но я никогда не сдаюсь. вернусь к вашему предложению по поиску, вот код <?php
require('routeros_api.class.php'); $API = new routeros_api(); $API->debug = true; $myusername = $_POST["myusername"]; $mypassword = $_POST["mypassword"]; $newpassword= $_POST["newpassword"]; $ipofsvr="172.16.1.1"; if ($API->connect($ipofsvr,'admin',"")) { $API->write('/ip/hotspot/user/getall'); $API->write('=.proplist=.id',false); $API->write('?name='.$myusername); $A = $API->read(); $A = $A[0]; echo "list .id value" .$A; $READ = $API->read(false); $ARRAY = $API->parse_response($READ); $API->write('/ip/hotspot/user/set/',false); $API->write('=.id='.$A['.id'],false); $API->write('=password='.$newpassword); $API->read(); $API->disconnect(); echo "Password Changed successfully!"; } else { echo "Incorrect Username or Password! Please try again!"; $API->disconnect(); } ?> когда я запускаю, получаю этот вывод Connection attempt #1 to 172.16.1.1:8728... <<< [6] /login >>> [5, 39] !done >>> [37, 1] =ret=c8e0d23ebe4ba26d3143df7ad2ba87a4 <<< [6] /login <<< [11] =name=admin <<< [44] =response=00e6d723bf535a6070e54f046d0acd1f26 >>> [5, 1] !done Connected... <<< [23] /ip/hotspot/user/getall <<< [14] =.proplist=.id <<< [11] ?name=admin >>> [5, 223] !trap >>> [31, 191] =message=no such command prefix >>> [5, 184] !done >>> [3, 179] !re >>> [7, 171] =.id=*1 >>> [9, 161] =comment= >>> [11, 149] =name=admin >>> [15, 133] =password=admin >>> [16, 116] =profile=default >>> [16, 99] =uptime=06:34:31 >>> [18, 80] =bytes-in=67384966 >>> [19, 60] =bytes-out=22911619 >>> [17, 42] =packets-in=63280 >>> [18, 23] =packets-out=29152 >>> [14, 8] =dynamic=false >>> [5, 1] !done list .id valueArray Notice: Undefined variable: _ in C:\wamp\www\hotspot\routeros_api.class.php on line 217 Notice: Undefined variable: _ in C:\wamp\www\hotspot\routeros_api.class.php on line 217 Notice: Undefined variable: _ in C:\wamp\www\hotspot\routeros_api.class.php on line 217 Notice: Undefined variable: _ in C:\wamp\www\hotspot\routeros_api.class.php on line 217 ребята, мне нужна помощь с этими кодами, как я уже говорил, это мой первый раз с php и api. это строка 217 файла routeros_api.class.php, если ((!$this->connected && !$STATUS['unread_bytes']) || ($this->connected && $_ == '!done' && !$STATUS['unread_bytes'])) имеет ли кто-нибудь обновленную версию routeros_api.class.php? как ни крути, теперь я получаю ошибку в строке выше и в других местах. |
|
|
|
|
|
18.05.2010 04:39:00
попробуйте: /ip/hotspot/user/set вместо: /ip/hotspot/user/set**/** помните, что предложение API состоит из команды и аргументов: /this/is/the/command =these=arguments
|
|
|
|
|
|
18.05.2010 08:32:00
вывод остается неизменным после использования /ip/hotspot/user/set не работает
|
|
|
|
|
|
18.05.2010 15:30:00
.n id номер — это пользователь в его последовательном порядке, указанном в области имени пользователя хотспота. Например, у меня есть следующее под моим: [username@Plazahotelilfeld] /ip hotspot user> pri Flags: X - отключен, D - динамический SERVER NAME ADDRESS PROFILE UPTIME 0 ilfeld guest 1w2d2h20m40s 1 admin default 22m15s 2 staff iphone 3m28s Это означает, что место +1 соответствует ‘=.id=*1’ для имени пользователя ilfeld и ‘=.id=*2’ для имени пользователя admin и так далее. У тебя есть routeros_api.class.php в той же папке на удаленном сервере? Если нет, тебе нужно получить его с Сообщи, если это помогло. -С уважением, DesertAdmin
|
|
|
|
|
|
19.05.2010 04:34:00
не делайте предположений. Вот простой пример: [admin@test-B] /ip hotspot user> add name=one [admin@test-B] /ip hotspot user> add name=two [admin@test-B] /ip hotspot user> add name=three [admin@test-B] /ip hotspot user> print Flags: X - отключен, D - динамический # SERVER NAME ADDRESS PROFILE UPTIME 0 one default 0s 1 two default 0s 2 three default 0s [admin@test-B] /ip hotspot user> :put [find] *1;*2;*3 [admin@test-B] /ip hotspot user> add name=four [admin@test-B] /ip hotspot user> remove [find where name="two"] [admin@test-B] /ip hotspot user> add name=two [admin@test-B] /ip hotspot user> :put [find] *1;*3;*4;*5 посмотрите на эти поля .ID и их значения. Значения .ID для элемента не меняются со временем.
|
|
|
|
|
|
02.03.2010 01:25:00
Вот мое новое изменение на странице для наших управляющих отелями, чтобы они могли изменить пароль своих основных учетных записей гостей для их точки доступа. Все остальные клиенты, которые нуждаются в скорости выше 128к, будут покупать у нас трафик. Я это хорошо защитил на нашем https сайте, который доступен только в наших сетях. Дайте знать, что вы думаете! Спасибо - с уважением, DesertAdmin
|
|
|
|
|
|
16.05.2010 07:27:00
Привет всем! Я пытаюсь создать систему, аналогичную той, что обсуждается на этой странице. Используя информацию с этой страницы, я хотел бы, чтобы пользователи хотспота изменяли свои пароли после входа. Файлы login.html и status.html находятся в стандартной папке хотспота mikrotik. Последовательность: login.html (обычная страница входа) >>>> status.html (генерируется после успешного входа) >>>> changepass.php (переход по ссылке на status.html) >>>> hspot1.php. Но у меня возникли трудности после вызова hspot1.php, я вижу только код на веб-странице и всё. Пароль не меняется!!! Мне нужна помощь. Неправильное понимание: у меня нет опыта в php, html, java... это мой первый раз... я дошел до этого момента благодаря этому форуму и гуглу. Вот код страницы статуса: <html> <head> <title> hotspot > статус</title> <style> <!-- .style1 { color: #660000; font-weight: bold; } --> </style> $(if refresh-timeout) <meta http-equiv="refresh" content="$(refresh-timeout-secs)"> $(endif) <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="expires" content="-1"> <style> <!-- textarea,input,select { background-color: #FDFBFB; border: 1px #BBBBBB solid; padding: 2px; margin: 1px; font-size: 14px; color: #808080; } .tabula{ border-width: 1px; border-collapse: collapse; border-color: #c1c1c1; background-color: transparent; font-family: verdana; font-size: 11px; } body{ color: #737373; font-size: 12px; font-family: verdana; } a, a:link, a:visited, a:active { color: #AAAAAA; text-decoration: none; font-size: 12px; } a:hover { border-bottom: 1px dotted #c1c1c1; color: #AAAAAA; } img {border: none;} td { font-size: 12px; padding: 4px;} .style2 {color: #660000} --> </style> <script language="JavaScript"> <!-- $(if advert-pending == 'yes') var popup = ''; function focusAdvert() { if (window.focus) popup.focus(); } function openAdvert() { popup = open('$(link-advert)', 'hotspot_advert', ''); setTimeout("focusAdvert()", 1000); } $(endif) function openLogout() { if (window.name != 'hotspot_status') return true; open('$(link-logout)', 'hotspot_logout', 'toolbar=0,location=0,directories=0,status=0,menubars=0,resizable=1,width=280,height=250'); window.close(); return false; } //--> </script> </head> <body bottommargin="0" topmargin="0" leftmargin="0" rightmargin="0" $(if advert-pending == 'yes') onLoad="openAdvert()" $(endif) >
</html> код для changepass.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Безымянный документ</title> </head> <body>
<!-- document.hotspot.myusername.focus(); //--> </script> </body> </html> затем код для hotspot1.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Безымянный документ</title> </head> <?php require('routeros_api.class.php'); $API = new routeros_api(); $API->debug = false; $myusername = $_POST["myusername"]; $mypassword = $_POST["mypassword"]; $newpassword= $_POST["newpassword"] $cmmnd ="=password="; $cmmnd .=$newpassword; $ipofsvr="172.16.1.1"; if ($API->connect($ipofsvr, $myusername, $mypassword)) { echo "Пароль успешно изменён!"; $API->write('/ip/hotspot/user/getall', false); $API->write('=.proplist=name', false); $API->write('?name=$myusername'); $API->write('/ip/hotspot/user/set', false); $API->write('=name=$myusername', false); $API->write($cmmnd); $READ = $API->read(false); $ARRAY = $API->parse_response($READ); $API->disconnect(); } else { echo "Неправильное имя пользователя или пароль! Пожалуйста, попробуйте снова!"; $API->disconnect(); } ?> <body> </body> </html> | |||||||||||||||||||||||||||||||
|
|
|
||||||||||||||||||||||||||||||
Читают тему
