Перейти к содержимому
Калькуляторы

denisovvsh

Пользователи
  • Публикации

    42
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные пользователем denisovvsh


  1. Здравствуйте, уважаемые форумчане.
    Я использую хотспот для организации авторизации пользователей, про закон, наверное все знают и все такое.
    Устройства Apple, не подключаются, вернее подключаются, потом отключаются - после проверки доступности своих ресурсов, т.к. по умолчанию нет доступа к Интернет.
    Для решения этой проблемы, раньше, достаточно было открыть доступ до ресурсов(ниже список), но с выходом последних версий ios, данный метод не подходит.
    Подскажите пожалуйста, есть ли какое-то решение? 
    Может еще хосты нужно открыть или что-то другое.
     
    Хосты, которые открывал раньше: 

    Hotspot - > Walled Garden
    *.apple.com
    *.apple.com.edgekey.net
    *.akamaiedge.net
    *.akamaitechnologies.com
    apple.com
    airport.us
    itools.info
    appleiphonecell.com
    captive.apple.com
    thinkdifferent.us
    ibook.info

    Hotspot - > Walled Garden IP List 
    captive.apple.com
    www.appleiphonecell.com
    www.itools.info
    www.ibook.info
    www.airport.us
    www.thinkdifferent.us
    static.ess.apple.com
    init-p01md.apple.com
    ess.apple.com
    apple.com
    gps.apple.com
  2. В ДНС что прописано? может днс от первого оператора ? пропиши 8.8.8.8 и попропбуй

    Естесссно днсы мы проверяли, мы даже на заводские настройки сбрасывали, я же писал)

     

    Выложите конфиг, что у вас в файрволе вообще прописано.

    Фаервол пуст, если не считать правила, которые создаются HotSpotом, автоматически, но и его мы отключали ради эксперемента.

    Есть только одно правило маскарада в нате

  3. Здравствуйте, уважаемые форумчане!

    У меня странная проблема.

    Есть сеть, состоящая из 18-и Микротиков, управляемая отдельным VLANом, организованная службой CAPsMAN в роуминг (1 главный 17 CAPов), с включенной службой HotSpot, с системой авторизации.

    При использовании канала от Ростелекома все работает отлично, нет проблем. Когда решили переключить на запасной канал, то появилась странная проблема, ping и трассировки до различных хостов проходят, при подключении к ethernet портам главного Микротика Интернет есть, а через WiFi CAPов, Интернета нет, т.е. ping и трассировки, также проходят, а при открытии в браузере любой страницы пишет что доступа нет. Примечательно, что если подключиться к встроенному модулю WiFi главного Микротика, также подключенного к CAPsMAN, все работает, получается, что не работает через CAPы.

    Выключили HotSpot, отключили авторизацию, очистили кэш DNS, итог тот же самый. Далее сбрасывали, главный Микротик, на заводские настройки, перенастраивали, все тоже самое. Поменяли MTU на VLANе с 1500 на 1480 и ниже, начали открываться страницы по https протоколу, а по http нет.

    Подключили канал от третьего оператора, все тоже самое, вернули на Ростелеком, все заработало.

    Вызвали специалиста из оператора связи, разводит руками, говорит - ограничений нет.

    Подключаемые каналы рабочие, настройки локальной сети тоже рабочие, т.к. от Ростелекома работает.

    Понятно одно, что дело в Микротиках.

    Подскажите пожалуйста, была ли у кого нибудь такая проблема и как лечить.

    Заранее благодарен.

  4. Достаточно немного почитать матчасть, чтобы понять, что http совсем не то же самое, что https

    Конечно, благодарю, за столь ценный совет, хоть бы ссылку на мат часть дал, раз такой умный.

    Но вопрос не про то чем отличается http от https.

    Как правильно настроить hotspot на mikrotik, чтобы пользователей, просто перекидывало на страницу авторизации по https протоколу, без дополнительных сообщений и предупреждений?

    Сертификат есть, проверенный и установленный.

    Похоже тех кто может просто ответить на вопрос нету.

  5. 204 это ожидаемый и нормальный ответ )

    Как сделать так чтобы этот ответ не возникал, а происходил редирект?

    Почему при работе по http не появляется такой ответ?

    Подскажите пожалуйста.

  6. Здравствуйте уважаемые форумчане!

    Не могу понять причину ошибки 74.125.232.233/generate_204 когда переключаю hotspot на https протокол.

    Сертификат ssl установлен рабочий, должен хотя бы предупреждение выдавать а тут ошибка и все, никуда нет доступа.

  7. Может это глупый вопрос.

    Но есть задача, при замыкании 1-го и 3-го пина, при заранее закороченном 2-го и 6-го, добиться Up link на порту, что собственно и происходит.

    А вот при размыкании 1-го и 3-го линк падает, но почему-то поднимается кратковременно периодически и опять падает, а надо чтоб не поднимался.

    Трафик на портах не ходит петли нет, важно просто включать и выключать линк, замыканием пар.

    Отключал auto-negotiation, установил скорость 100 Мбит принудительно, 10 Мбит отключил, все равно прыгает.

    Что самое интересное, есть роутеры где при таких же настройках порт не прыгает, т.е. или up или down.

    Что это баг в роутере или в настройке?

    Подскажите, пожалуйста, что еще настроить чтобы порт не поднимался?

  8. Здравствуйте уважаемые форумчане!

    Купил роутер mikrotik hap lite настроил как всегда, как многие другие роутеры. Настроил для мониторинга по порту 8728 API, а доступа нет!

    Проверяю сервисом http://www.networkcenter.info/index порт открыт, а коннект не происходит.

    В чем может быть проблема?

    Оператор связи говорит что блокировок нет, ip статический.

    Обновил прошивку.

    Правил никаких дополнительно не создавал, только маскарад для доступа в глобал. Может что-то гдето по умолчанию изменилось в настройках.

  9. Здравствуйте, уважаемые форумчане!

    У меня не понятная проблема.

    Есть скрипт, который запускается на микротике

     

    /tool fetch host="mysite.ru" keep-result=no mode=http address="mysite.ru" src-path="/action.php?mac=$MAC"
    

    Он отправляет мак клиента скрипту на сайте.

    На других микротиках все работает, купил новый mikrotik hap lite, на нем не работает.

    В логах сервера сайта пишет ошибка "client denied by server configuration:", тех поддержка хостинга утверждает, что с их стороны все без ограничений.

    Проверил, сайт доступен для миротика, в .htaccess ограничений нет, с другого микротика все прилетает скрипту сайта без проблем.

    У меня остался последний вариант, у микротика коряво работает ПО, нужна замена микротика, обновление прошивки не помогло.

     

    Может кто подскаждет, в чем проблема, как лечить, может в новых микротиках что-то изменилось???

    Заранее благодарен.

  10. Я пользуюсь вот этой системой http://accessnetwork.ru/ все отлично работает, смс бесплатные, повторных регистраций пользователей нет, т.к. повторное подключение производится полностью автоматически. А то у других надо или заново регаться или надо браузер открывать чтоб интернет появился, не удобно если пользуешься приложением.

    Сам себя не похвалишь - никто не похвалит.

    Никаких преувеличений!

    А еще в системе предусмотрен мониторинг датчиков Геркон, позволяет, через личный кабинет, отслеживать состояние дверей.

    Эффективно на квартирах, которые сдаются в аренду, и Интернет под контролем и двери.

    Датчики подключаются легко, к портам, любой витухой.

  11. Я пользуюсь вот этой системой http://accessnetwork.ru/ все отлично работает, смс бесплатные, повторных регистраций пользователей нет, т.к. повторное подключение производится полностью автоматически. А то у других надо или заново регаться или надо браузер открывать чтоб интернет появился, не удобно если пользуешься приложением.

  12. denisovvsh, если интерфейс независимый и имеет собственный IP - используйте netwatch.

    Сама по себе запись строки лога в память трапов не вызывает.

    А если подключено неуправляемое оборудование, без ip, как отследить запись в логи о падении линка и запустить скрипт по данному событию?

  13. Доброго времени суток!

    Подскажите пожалуйста, как запустить скрипт по событию падения линка на порту.

    Желательно чтобы инициатором запуска скрипта была запись лога, link down

  14. А вот как, извращенно решить многие задачи, одна из них, это удаление пассивных пользователей hotspot, если они не проявляли активности, заданное, в функции, время.

     

    //Используя класс выше, создаем дочерний класс.

    <?php
    class routeros_api_oversize extends routeros_api{  
    
    var $timeMask;
    
    function routeros_api_oversize(){  //конструктор
     $this->timeMask = '1d'; //сколько времени бездействует пользователь
    }
    
    function parseArrHotspotHost($routerArray){
     $resultParseArrHotspot = array();
     $client = array();
      foreach($routerArray as $a => $b){
       $val_arr = substr($b,1);
       $val_arr = substr($val_arr,strpos($val_arr,'=')+1);
       $sum_str = strlen($val_arr);
       $sum_str = "-".$sum_str - 1;
       $key_arr = substr($b, 1, $sum_str);
        if($key_arr == ".id"){$client[$key_arr] = $val_arr;}
        if($key_arr == "to-address"){$client[$key_arr] = $val_arr;}
         if($key_arr == "idle-time"){
    $client[$key_arr] = $val_arr;
            array_push($resultParseArrHotspot, $client);
         }
      }
      return $resultParseArrHotspot;
    }
    
    }
    
    ?>
    

     

    //запускаем, на каком нибудь сервере(хостинге), скрипт который будет выполнять проверку пользователей hotspot

    //которые имеют статус bypassed и бездействуют 2 дня

    //удаляем их при обнаружении

     

    <?php
    $RAO = new routeros_api_oversize(); //создаем экземпляр класса
    $ipRouter = 'ip маршрутизатора микротик с включенным хотспот';
    $usRouter = 'имя пользователя с правами на запись и чтение и выполнение';
    $pasRouter = 'пароль';
    
    if($RAO->connect($ipRouter, $usRouter, $pasRouter)){ //если подключение к маршрутизатору вернуло true
    $RAO->write('/ip/hotspot/host/print'); //отправляем команду
    $routerArr = $RAO->read(false); //получаем массив данных с пользователями hotspot
    $list_info = $RAO->parseArrHotspotHost($routerArr); //парсим полученный массив и получаем нужный нам массив пользователей на борту hotspot
    $k = 0; 
     while(isset($list_info[$k])){ //проходим по массиву циклом и одновременно ищем пользователя среди пассивных
      //извлекаем данные о пользователе и присваиваем их переменным
      $ip = $list_info[$k]['to-address'];
      $idle = $list_info[$k]['idle-time']; //формат времени 1w1d1h1m1s
    
      $pos = strstr($idle, $RAO->timeMask); // ищем вхождение подстроки маски в строку времени простоя
    
      if($pos != false){ // если поиск вернул TRUE
       $RAO->write('/ip/hotspot/ip-binding/print'); // запрашиваем данные о пассивных пользователях
       $routerArr2 = $RAO->read(false); // получаем массив
       $list_info2 = $RAO->parseArrHotspotHost($routerArr2); // парсим
       $k2 = 0;
        while(isset($list_info2[$k2])){ // цикл прохождения по массиву для поиска по ip адресу
         $ip2 = $list_info2[$k2]['to-address'];
          if($ip2 == $ip){ // находим пользователя 
           $id_ip = $k2;
           $RAO->comm('/ip/hotspot/ip-binding/remove', array('.id' => $id_ip,)); // удаляем пользователя из пассивных пользователей хотспота
           $k2++;
           break;
          }
          else{
           $k2++;
           continue;
          }
        }
        $k++;
        continue;
      }
      else{
       $k++;
       continue; // продолжаем проверять остальных пользователей hotspot
      }
     }	
     $RAO->disconnect(); // отключаемся от маршрутизатора
    }
    
    ?>
    

  15. Вот PHP класс для работы с RouterOS через API

    <?php
    /*****************************
    *
    * RouterOS PHP API class v1.5
    * Author: Denis Basta
    * Contributors:
    *    Nick Barnes
    *    Ben Menking (ben [at] infotechsc [dot] com)
    *    Jeremy Jefferson (http://jeremyj.com)
    *    Cristian Deluxe (djcristiandeluxe [at] gmail [dot] com)
    *
    * http://www.mikrotik.com
    * http://wiki.mikrotik.com/wiki/API_PHP_class
    *
    ******************************/
    
    class routeros_api
    {
       var $debug = false;      // Show debug information
       var $error_no;           // Variable for storing connection error number, if any
       var $error_str;          // Variable for storing connection error text, if any
       var $attempts = 5;       // Connection attempt count
       var $connected = true;  // Connection state
       var $delay = 3;          // Delay between connection attempts in seconds
       var $port = 8728;        // Port to connect to
       var $timeout = 3;        // Connection attempt timeout and data read timeout
       var $socket;             // Variable for storing socket resource
    
       /**
        * Print text for debug purposes
        *
        * @param string      $text       Text to print
        *
        * @return void
        */
       function debug($text)
       {
           if ($this->debug)
               echo $text . "\n";
       }
    
    
       /**
        * 
        *
        * @param string        $length
        *
        * @return void
        */
       function encode_length($length)
       {
           if ($length < 0x80) {
               $length = chr($length);
           } else if ($length < 0x4000) {
               $length |= 0x8000;
               $length = chr(($length >> 8) & 0xFF) . chr($length & 0xFF);
           } else if ($length < 0x200000) {
               $length |= 0xC00000;
               $length = chr(($length >> 16) & 0xFF) . chr(($length >> 8) & 0xFF) . chr($length & 0xFF);
           } else if ($length < 0x10000000) {
               $length |= 0xE0000000;
               $length = chr(($length >> 24) & 0xFF) . chr(($length >> 16) & 0xFF) . chr(($length >> 8) & 0xFF) . chr($length & 0xFF);
           } else if ($length >= 0x10000000)
               $length = chr(0xF0) . chr(($length >> 24) & 0xFF) . chr(($length >> 16) & 0xFF) . chr(($length >> 8) & 0xFF) . chr($length & 0xFF);
           return $length;
       }
    
    
       /**
        * Login to RouterOS
        *
        * @param string      $ip         Hostname (IP or domain) of the RouterOS server
        * @param string      $login      The RouterOS username
        * @param string      $password   The RouterOS password
        *
        * @return boolean                If we are connected or not
        */
       function connect($ip, $login, $password)
       {
           for ($ATTEMPT = 1; $ATTEMPT <= $this->attempts; $ATTEMPT++) {
               $this->connected = false;
               $this->debug('Connection attempt #' . $ATTEMPT . ' to ' . $ip . ':' . $this->port . '...');
               $this->socket = @fsockopen($ip, $this->port, $this->error_no, $this->error_str, $this->timeout);
               if ($this->socket) {
                   socket_set_timeout($this->socket, $this->timeout);
                   $this->write('/login');
                   $RESPONSE = $this->read(false);
                   if ($RESPONSE[0] == '!done') {
                       $MATCHES = array();
                       if (preg_match_all('/[^=]+/i', $RESPONSE[1], $MATCHES)) {
                           if ($MATCHES[0][0] == 'ret' && strlen($MATCHES[0][1]) == 32) {
                               $this->write('/login', false);
                               $this->write('=name=' . $login, false);
                               $this->write('=response=00' . md5(chr(0) . $password . pack('H*', $MATCHES[0][1])));
                               $RESPONSE = $this->read(false);
                               if ($RESPONSE[0] == '!done') {
                                   $this->connected = true;
                                   break;
                               }
                           }
                       }
                   }
                   fclose($this->socket);
               }
               sleep($this->delay);
           }
           if ($this->connected)
               $this->debug('Connected...');
           else
               $this->debug('Error...');
           return $this->connected;
       }
    
    
       /**
        * Disconnect from RouterOS
        *
        * @return void
        */
       function disconnect()
       {
           fclose($this->socket);
           $this->connected = false;
           $this->debug('Disconnected...');
       }
    
    
       /**
        * Parse response from Router OS
        *
        * @param array       $response   Response data
        *
        * @return array                  Array with parsed data
        */
       function parse_response($response)
       {
           if (is_array($response)) {
               $PARSED      = array();
               $CURRENT     = null;
               $singlevalue = null;
               foreach ($response as $x) {
                   if (in_array($x, array(
                       '!fatal',
                       '!re',
                       '!trap'
                   ))) {
                       if ($x == '!re') {
                           $CURRENT =& $PARSED[];
                       } else
                           $CURRENT =& $PARSED[$x][];
                   } else if ($x != '!done') {
                       $MATCHES = array();
                       if (preg_match_all('/[^=]+/i', $x, $MATCHES)) {
                           if ($MATCHES[0][0] == 'ret') {
                               $singlevalue = $MATCHES[0][1];
                           }
    					$CURRENT[$MATCHES[0][0]] = (isset($MATCHES[0][1]) ? $MATCHES[0][1] : '');
    				}
                   }
               }
               if (empty($PARSED) && !is_null($singlevalue)) {
                   $PARSED = $singlevalue;
               }
               return $PARSED;
           } else
               return array();
       }
    
    
       /**
        * Parse response from Router OS
        *
        * @param array       $response   Response data
        *
        * @return array                  Array with parsed data
        */
       function parse_response4smarty($response)
       {
           if (is_array($response)) {
               $PARSED  = array();
               $CURRENT = null;
               $singlevalue = null;
               foreach ($response as $x) {
                   if (in_array($x, array(
                       '!fatal',
                       '!re',
                       '!trap'
                   ))) {
                       if ($x == '!re')
                           $CURRENT =& $PARSED[];
                       else
                           $CURRENT =& $PARSED[$x][];
                   } else if ($x != '!done') {
                       $MATCHES = array();
                       if (preg_match_all('/[^=]+/i', $x, $MATCHES)) {
                           if ($MATCHES[0][0] == 'ret') {
                               $singlevalue = $MATCHES[0][1];
                           }
                           $CURRENT[$MATCHES[0][0]] = (isset($MATCHES[0][1]) ? $MATCHES[0][1] : '');
    				}
                   }
               }
               foreach ($PARSED as $key => $value) {
                   $PARSED[$key] = $this->array_change_key_name($value);
               }
               return $PARSED;
               if (empty($PARSED) && !is_null($singlevalue)) {
                   $PARSED = $singlevalue;
               }
           } else {
               return array();
           }
       }
    
    
       /**
        * Change "-" and "/" from array key to "_"
        *
        * @param array       $array      Input array
        *
        * @return array                  Array with changed key names
        */
       function array_change_key_name(&$array)
       {
           if (is_array($array)) {
               foreach ($array as $k => $v) {
                   $tmp = str_replace("-", "_", $k);
                   $tmp = str_replace("/", "_", $tmp);
                   if ($tmp) {
                       $array_new[$tmp] = $v;
                   } else {
                       $array_new[$k] = $v;
                   }
               }
               return $array_new;
           } else {
               return $array;
           }
       }
    
    
       /**
        * Read data from Router OS
        *
        * @param boolean     $parse      Parse the data? default: true
        *
        * @return array                  Array with parsed or unparsed data
        */
       function read($parse = true)
       {
           $RESPONSE = array();
           $receiveddone = false;
           while (true) {
               // Read the first byte of input which gives us some or all of the length
               // of the remaining reply.
               $BYTE   = ord(fread($this->socket, 1));
               $LENGTH = 0;
               // If the first bit is set then we need to remove the first four bits, shift left 8
               // and then read another byte in.
               // We repeat this for the second and third bits.
               // If the fourth bit is set, we need to remove anything left in the first byte
               // and then read in yet another byte.
               if ($BYTE & 128) {
                   if (($BYTE & 192) == 128) {
                       $LENGTH = (($BYTE & 63) << 8) + ord(fread($this->socket, 1));
                   } else {
                       if (($BYTE & 224) == 192) {
                           $LENGTH = (($BYTE & 31) << 8) + ord(fread($this->socket, 1));
                           $LENGTH = ($LENGTH << 8) + ord(fread($this->socket, 1));
                       } else {
                           if (($BYTE & 240) == 224) {
                               $LENGTH = (($BYTE & 15) << 8) + ord(fread($this->socket, 1));
                               $LENGTH = ($LENGTH << 8) + ord(fread($this->socket, 1));
                               $LENGTH = ($LENGTH << 8) + ord(fread($this->socket, 1));
                           } else {
                               $LENGTH = ord(fread($this->socket, 1));
                               $LENGTH = ($LENGTH << 8) + ord(fread($this->socket, 1));
                               $LENGTH = ($LENGTH << 8) + ord(fread($this->socket, 1));
                               $LENGTH = ($LENGTH << 8) + ord(fread($this->socket, 1));
                           }
                       }
                   }
               } else {
                   $LENGTH = $BYTE;
               }
               // If we have got more characters to read, read them in.
               if ($LENGTH > 0) {
                   $_      = "";
                   $retlen = 0;
                   while ($retlen < $LENGTH) {
                       $toread = $LENGTH - $retlen;
                       $_ .= fread($this->socket, $toread);
                       $retlen = strlen($_);
                   }
                   $RESPONSE[] = $_;
                   $this->debug('>>> [' . $retlen . '/' . $LENGTH . '] bytes read.');
               }
               // If we get a !done, make a note of it.
               if ($_ == "!done")
                   $receiveddone = true;
               $STATUS = socket_get_status($this->socket);
               if ($LENGTH > 0)
                   $this->debug('>>> [' . $LENGTH . ', ' . $STATUS['unread_bytes'] . ']' . $_);
               if ((!$this->connected && !$STATUS['unread_bytes']) || ($this->connected && !$STATUS['unread_bytes'] && $receiveddone))
                   break;
           }
           if ($parse)
               $RESPONSE = $this->parse_response($RESPONSE);
           return $RESPONSE;
       }
    
    
       /**
        * Write (send) data to Router OS
        *
        * @param string      $command    A string with the command to send
        * @param mixed       $param2     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 write($command, $param2 = true)
       {
           if ($command) {
               $data = explode("\n", $command);
               foreach ($data as $com) {
                   $com = trim($com);
                   fwrite($this->socket, $this->encode_length(strlen($com)) . $com);
                   $this->debug('<<< [' . strlen($com) . '] ' . $com);
               }
               if (gettype($param2) == 'integer') {
                   fwrite($this->socket, $this->encode_length(strlen('.tag=' . $param2)) . '.tag=' . $param2 . chr(0));
                   $this->debug('<<< [' . strlen('.tag=' . $param2) . '] .tag=' . $param2);
               } else if (gettype($param2) == 'boolean')
                   fwrite($this->socket, ($param2 ? chr(0) : ''));
               return true;
           } else
               return false;
       }
    
    
       /**
        * Write (send) data to Router OS
        *
        * @param string      $com        A string with the command to send
        * @param array       $arr        An array with arguments or queries
        *
        * @return array                  Array with parsed
        */
       function comm($com, $arr = array())
       {
           $count = count($arr);
           $this->write($com, !$arr);
           $i = 0;
           foreach ($arr as $k => $v) {
               switch ($k[0]) {
                   case "?":
                       $el = "$k=$v";
                       break;
                   case "~":
                       $el = "$k~$v";
                       break;
                   default:
                       $el = "=$k=$v";
                       break;
               }
               $last = ($i++ == $count - 1);
               $this->write($el, $last);
           }
           return $this->read();
       }
    }
    ?>