Перейти к публикации
iT4iT.CLUB

Den MoRDa

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

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

  • Посещение

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


  1. Поменялось оборудование. Теперь оборудование Eltex.
    По снмп на ней оид который бы отдавал мак таблицу . ($dot1dTpFdbAddress    = '.1.3.6.1.2.1.17.4.3.1.1';      такого оида нет).

    Есть вот что:

    "

    Для того, чтобы получить c коммутатора MAC, номер порта и VLAN хоста нужно смотреть именно таблицу MAC. Для этого используйте следующий OID:
     
    24хх:
    snmpwalk  -v1 -c public 192.168.50.9 1.3.6.1.2.1.17.7.1.2.2.1.2
    SNMPv2-SMI::mib-2.17.7.1.2.2.1.2.1.96.99.76.177.230.113 = INTEGER: 24
    SNMPv2-SMI::mib-2.17.7.1.2.2.1.2.102.0.38.185.149.246.211 = INTEGER: 1

    "

    т.е. в самом оиде есть мак (в десятичной форме ) и номер влан.

    Но, у меня не хватает знаний, что бы это внедрить в скрипт.. 

    Получилась только фукнция, которая из десятичной формы преобразует в нужный нам формат аля ("АА АА АА АА АА АА")
     

    function dec2mac($mac) {
        $mac=preg_split("([.])", $mac, 6);
        $hexmac="";
        foreach ( $mac as $part )
        {
        $part=dechex($part);
        strlen($part)<2 ? $hexmac.="0$part " : $hexmac.="$part ";
        }
        return $hexmac;    

    }

    Но, честно говоря, я даже не знаю как инфу взять из части ОИДА (не из полученного значения)
    т.е. по сути нам нужна из оида взять мак засунуть в эту функцию - получим вид мака который нам давала Циска и скормить все это в данный скрипт.

    Кто - нибудь может это реализовать :)?
     

     


  2. Удалил из системы IP-MIB, чтобы обращался всегда к SNMPv2-SMI.
    Полученный вывод - то что нам нужно в HEX-string. Но заходя на наш "сайт"  все IP - unknown.
    Я сделал скрипт что бы смотреть вывод прям в centos (причем проверял вывод на каждой этапе):
     

    <?php
    
    $atPhysAddress        = '.1.3.6.1.2.1.4.35.1.4';  
    //$atPhysAddress        = '.1.3.6.1.2.1.3.1.1.2';      
    snmp_read_mib('/usr/share/snmp/mibs/SNMPv2-SMI.txt');
    $session = new SNMP(SNMP::VERSION_2C, 'ВАШ IP', 'public' ); 
    $session->valueretrieval = SNMP_VALUE_LIBRARY;
    $session->oid_output_format = SNMP_OID_OUTPUT_NUMERIC;
    $session->oid_increasing_check = false; 
    if(($atPhysAddress = $session->walk($atPhysAddress)) != false) {
                            foreach($atPhysAddress as $id => $val) $arp[trim(str_replace('Hex-STRING: ', '', $val))] = implode('.', array_slice(explode('.', $id), -4));
                            $session->close();
                            unset($session);
    
    
    print_r( $arp );
    $mac = '9C 93 4E 14 10 5B'; //mac для проверки вывода
    $ip  = $arp[$mac];
    print_r( $ip );
    //$session->close();
    }
    
    
    
    $sysDescr             = '.1.3.6.1.2.1.1.1';            # описание                           [system]
    $dot1dTpFdbAddress    = '.1.3.6.1.2.1.17.4.3.1.1';     # список MAC адресов                 [FDB]
    $dot1dTpFdbPort       = '.1.3.6.1.2.1.17.4.3.1.2';     # список расположения MAC по портам  [FDB]
    $dot1dBasePortIfIndex = '.1.3.6.1.2.1.17.1.4.1.2';     # идентификатор порта                [Base]
    $ifName               = '.1.3.6.1.2.1.31.1.1.1.1';     # имя порта                          [system]
    
    
    
    
    
    $session = new SNMP(SNMP::VERSION_2C, 'Ваш айпи', 'public@101' );
                            $session->valueretrieval = SNMP_VALUE_LIBRARY;
                            $session->oid_output_format = SNMP_OID_OUTPUT_NUMERIC;
                            $session->oid_increasing_check = false;
                            if(isset($backupVar)) foreach($backupVar as $var => $val) $$var = $val; unset($backupVar);
                            if(($dot1dTpFdbAddress = $session->walk($dot1dTpFdbAddress, true)) != false) {
                                foreach($dot1dTpFdbAddress as $id => $val) $macTable[$id] = trim(str_replace('Hex-STRING: ', '', $val));
                                // Запрашиваем таблицу расположения MAC адресов по портам свича
                                if(($dot1dTpFdbPort = $session->walk($dot1dTpFdbPort, true)) != false) {
                                    foreach($dot1dTpFdbPort as $id => $val) $portTable[trim(str_replace('INTEGER: ', '', $val))][] = $macTable[$id];
                                    ksort($portTable);
    
    
    // Индексируем порты и узнаем их реальные имена
    
    
    if(($dot1dBasePortIfIndex = $session->walk($dot1dBasePortIfIndex, true)) != false) {
                                        foreach($dot1dBasePortIfIndex as $id => $val) $portIndex[trim(str_replace('INTEGER: ', '', $val))] = $id;
                                        if(($ifName = $session->walk($ifName, true)) != false) {
                                            foreach($ifName as $id => $val) if(isset($portIndex[$id])) $portName[trim(str_replace('STRING: ', '', $val))] = $portIndex[$id];
                                            $portName = array_flip($portName);
    
    }}}}
    
    print_r( $portTable ); //проверяем вывод
    print_r( $portName );  // проверяем вывод
    
    
    
    
    
    
    
    
    foreach($portTable as $num => $info) {
            $i=0;
            foreach($info as $id => $mac) {
                //$css = ((($i++)%2!=0)?'1':'2');
                $ip  = isset($arp[$mac])?$arp[$mac]:'unknown';
                //$vendor = explode('(hex)', shell_exec("cat ./oui.txt | grep ".str_replace(' ', '-', substr($mac, 0, 8))));
                //$vendor = isset($vendor[1])? trim($vendor[1]) : 'unknown';
                //$dns = ($ip != 'unknown')?((($dns = gethostbyaddr($ip)) != $ip)? (($domain != '')?str_replace($domain, '', $dns):''): ''):'';
            }
    print_r( $ip );   //проверяем вывод
    print_r( "\n" );  // переход на новую строку
        }
    
    
    
    
    ?>

    В итоге мы получаем то что мы хотим. 


    Но я не понимаю почему тогда в HTML все IP Unknown? (если проверку  isset($arp[$mac]) не делать, то колонки просто пустые )
    image.thumb.png.c5607037f9970ac1b8cd21a352a1b209.png


  3. Еще одно наблюдение:
    Глобальные параметр,  комьюнити, удалось переопределить локально для свича, 
    а такой параметр как atPhysAddress не удалось  локально переопределить. (Если глобально изменить OID, то все хорошо, если пытаться локально переопределить, то выдает ошибку 'Нет данных о ARP таблице маршрутизатора' )

     

     

    Также добавлю, что с помощью snmp_read_mib (/.../SNMPv2-SMI.txt) не удалось заставить использовать данный миб :(

     

    Вообще не понимаю, если закомментировать глобальную $atPhysAddress все равно скрипт работает. А вот если переопределить локально этот же параметр (при чем даже если поставить, такой же как глобальный) то не работает :(


  4. Хм... интересное наблюдение: snmpwalk на разных ОС выдает разные выводы (см. выше)
    Т.е. на сентОС для некоторых рутеров снмп вывод может быть с ":" для других рутеров без ":"  (На убунте же та же железка по тому же oid выдает HEX-string без ":")
    Не понятно какой вывод смнп будет выводить модуль питона. Зависиот от ОС или нет. О.о.

     

    Как выяснилось, используют разные MIB.

     

     

    Что нашел: если из под centos Делать snmpwalk достаточно добавить -m SNMPv2-SMI (указать какой mib использовать при опросе) то вывод получается, который нам нужен , через Hex-STRING. Как добавить в скрипт пока не знаю :(

     


  5. А как будут работать третий и шестые конфигурации

    small_shop и 192.168.0.1 на одном уровне вложенности.
    И на страничке у нас получиться как будто два свича small_shop и 192.168.0.1. А параметр для 0.1 так и не передастся.
    

     

    Тоже самое и в шестом примере:
    На домашней странице у нас будут три меню:

    Home1

    192.168.0.1

    192.168.0.2

    Вместо передачи особых параметров для 0,1 и 0,2


  6. 08.12.2020 в 16:09, Den MoRDa сказал:

    Просмотрел snmpwalk 1.3.6.1.2.1.17.4.3.1.1
    Оказывается он выводит mac Таблицу только Vlan1.... и как заставить выводить другие влан не понятно :(.
    Оборудование обычные циско каталист 3560....

    Нагуглил.. На цисках Vlan указывается community@Vlan#
    Т.е. строка выглядит так
    snmpwalk -v 2c -c public@101 192.168.x.x 1.3.6.1.2.1.17.4.3.1.1

    Только не знаю, как сюда это приладить.. если изменить название community - не работает.. 
    ХЕЛП... Спасибо заранее.
     

     

    Самое близкое, что нашел
    https://github.com/jantman/SwitchSNMP/blob/master/com_jasonantman_SwitchSNMP_IOS.php
    public function getPortMACs($vlans) - то что нужно 

    но соединить не могу  :(


  7. 5 часов назад, Den MoRDa сказал:

    Нид хелп.
    Ситуация такая: циски и компы были раньше в одной сети, например  192,168,1,0/24 и в одном влан. - все работало очень хорошо.
    Сейчас  компьютеры и управляющие интерфейсы цисок в разных подсетях и влан: например: циски 192.168.0.0/24 влан 100 компьютеры 192.168.1.0/24 влан 101
    Свичпорт сейчас показывает только таблицу соседних цисок (вложенная картинка) Можно ли , что бы показывал все устройства ну или хотя бы только компы.? 

    image.thumb.png.c62c9080fe00f8fb89f51b54e61a9027.png

    Просмотрел snmpwalk 1.3.6.1.2.1.17.4.3.1.1
    Оказывается он выводит mac Таблицу только Vlan1.... и как заставить выводить другие влан не понятно :(.
    Оборудование обычные циско каталист 3560....

    Нагуглил.. На цисках Vlan указывается community@Vlan#
    Т.е. строка выглядит так
    snmpwalk -v 2c -c public@101 192.168.x.x 1.3.6.1.2.1.17.4.3.1.1

    Только не знаю, как сюда это приладить.. если изменить название community - не работает.. 
    ХЕЛП... Спасибо заранее.
     


  8. Нид хелп.
    Ситуация такая: циски и компы были раньше в одной сети, например  192,168,1,0/24 и в одном влан. - все работало очень хорошо.
    Сейчас  компьютеры и управляющие интерфейсы цисок в разных подсетях и влан: например: циски 192.168.0.0/24 влан 100 компьютеры 192.168.1.0/24 влан 101
    Свичпорт сейчас показывает только таблицу соседних цисок (вложенная картинка) Можно ли , что бы показывал все устройства ну или хотя бы только компы.? 

    image.thumb.png.c62c9080fe00f8fb89f51b54e61a9027.png

×
×
  • Создать...