Если этот вопрос уже задавали, извиняюсь. Я провёл бесчисленные часы, ищя ответ через Google и на этом сайте: я создал внешний PHP-скрипт для регистрации и входа клиентов. Я модифицировал файл login.html на хотспоте, чтобы передавать id и challenge. Я пытался объединить chap-id, пароль и chap-challenge так: $pwd = $chapid.$password.$chapchallenge в моём внешнем PHP-файле. Эхо $pwd выглядело так: \051test\333\311\130\244\370\106\344\017\263\167\057\152\317 \114\013\323, где \051 — это chap-id, а test — пароль. Преобразование не совпадает, и chap не срабатывает. Я изменил login.html, чтобы показать chap-пароль, который был c5cc6920e01c5cbf0545b42e1c551111. php md5() показал 445a83713211579469e2f2577697d64b. Я, честно говоря, запутался. Не получается передать переменные из PHP в функции и внешний javascript-файл (md5.js), так что не могу использовать их в своём скрипте. Мне кажется, что обратные слеши нужно убрать и заменить чем-то другим перед md5()??? Очень буду благодарен за помощь!
PHP md5() для страницы входа
PHP md5() для страницы входа, RouterOS
09.02.2010 23:08:00
|
|
|
|
12.08.2011 16:53:00
Для тех, кому интересно, мне наконец удалось заставить работу md5-хэша через PHP. Важно заметить, что эти \nnn — это не обычные символы. Каждый из них представляет восьмеричное значение. Чтобы получить правильный md5-хэш в PHP, нужно делать так: $hash = md5("chap-id".password."chap-challenge"); Например: $hash = md5("\373".'test'."\314\135\024\000\354\025\252\076\261\347\222\151\146\002\25
|
|
|
|
21.07.2013 12:33:00
Да, код здесь работает нормально:
|
|
|
|
14.01.2016 05:42:00
Моё решение: #!/usr/bin/php5
<?php class LoginMikrotik { var $urlLogin = 'http://hostpot.com/login'; var $urlLogout = 'http://hostpot.com/logout'; var $myPassword = 'secret'; var $myUsername = 'username'; function genChapPassword() { // создаём curl ресурс $ch = curl_init(); // устанавливаем URL curl_setopt($ch, CURLOPT_URL, $this->urlLogin); // возвращать ответ в виде строки curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // в $output сохраняется результат $output = curl_exec($ch); // закрываем curl, чтобы освободить ресурсы curl_close($ch); $lines = explode(PHP_EOL, $output); foreach ($lines as $line) { if (strpos($line, 'hexMD5')) { $match = array(); preg_match('/\'([^\']*)\'.*\'([^\']*)\'/', $line, $match); if(count($match) == 3) { $pass = ''; $chapId = utf8_decode($match[1]); $chapChallenge = utf8_decode($match[2]); eval("\$pass = md5(\"$chapId\" . \$this->myPassword . \"$chapChallenge\");"); return $pass; } } } return false; } function login() { $password = $this->genChapPassword(); if (!$password) { echo "Ошибка!"; } $ch = curl_init(); // устанавливаем URL curl_setopt($ch, CURLOPT_URL,$this->urlLogin); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, "username=".$this->myUsername."&password=" . $password . "&popup=true&dst="); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $server_output = curl_exec ($ch); $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close ($ch); echo "\nкод: " . $httpcode; echo "\nответ: " . $server_output; } function logout() { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $this->urlLogout); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $output = @curl_exec($ch); curl_close($ch); return $output; } } #использование: echo "действие: " . $argv[1] . "\n"; $login = new LoginMikrotik(); switch ($argv[1]) { case 'start': $login->login(); break; case 'stop': $login->logout(); exit(0); break; default: break; } get code: |
||||
|
|
|||
Читают тему