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

Den MoRDa

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

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

  • Посещение

Все публикации пользователя Den MoRDa

  1. Опять же по OID 1.3.6.1.2.1.17.7.1.4.3.1.1 можем получить vlan И по сути у нас нечто такое 1.3.6.1.2.1.17.7.1.2.2.1.2.$vlan.$mac = $portnumber
  2. Циско видимо поддерживает BRIDGE-MIB::dot1dTpFdbPort, а элтекс Q-BRIDGE-MIB::dot1qVlanFdbId. Очень хотелось помощи Kitsum
  3. Поменялось оборудование. Теперь оборудование 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; } Но, честно говоря, я даже не знаю как инфу взять из части ОИДА (не из полученного значения) т.е. по сути нам нужна из оида взять мак засунуть в эту функцию - получим вид мака который нам давала Циска и скормить все это в данный скрипт. Кто - нибудь может это реализовать :)?
  4. Я сделал это :)).. Выяснил что в $arp до сих пор хранилось string:mac Надо было лишь перезапустить апач. service httpd restart
  5. Удалил из системы 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]) не делать, то колонки просто пустые )
  6. Еще одно наблюдение: Глобальные параметр, комьюнити, удалось переопределить локально для свича, а такой параметр как atPhysAddress не удалось локально переопределить. (Если глобально изменить OID, то все хорошо, если пытаться локально переопределить, то выдает ошибку 'Нет данных о ARP таблице маршрутизатора' ) Также добавлю, что с помощью snmp_read_mib (/.../SNMPv2-SMI.txt) не удалось заставить использовать данный миб Вообще не понимаю, если закомментировать глобальную $atPhysAddress все равно скрипт работает. А вот если переопределить локально этот же параметр (при чем даже если поставить, такой же как глобальный) то не работает
  7. Хм... интересное наблюдение: snmpwalk на разных ОС выдает разные выводы (см. выше) Т.е. на сентОС для некоторых рутеров снмп вывод может быть с ":" для других рутеров без ":" (На убунте же та же железка по тому же oid выдает HEX-string без ":") Не понятно какой вывод смнп будет выводить модуль питона. Зависиот от ОС или нет. О.о. Как выяснилось, используют разные MIB. Что нашел: если из под centos Делать snmpwalk достаточно добавить -m SNMPv2-SMI (указать какой mib использовать при опросе) то вывод получается, который нам нужен , через Hex-STRING. Как добавить в скрипт пока не знаю
  8. Столкнулся с проблемой. Вывод некоторых роутеров таблицы соответствия ip/mac происходит как на картинке А скрипт заточен под:
  9. А как будут работать третий и шестые конфигурации 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
  10. Самое близкое, что нашел https://github.com/jantman/SwitchSNMP/blob/master/com_jasonantman_SwitchSNMP_IOS.php public function getPortMACs($vlans) - то что нужно но соединить не могу
  11. Просмотрел 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 - не работает.. ХЕЛП... Спасибо заранее.
  12. Нид хелп. Ситуация такая: циски и компы были раньше в одной сети, например 192,168,1,0/24 и в одном влан. - все работало очень хорошо. Сейчас компьютеры и управляющие интерфейсы цисок в разных подсетях и влан: например: циски 192.168.0.0/24 влан 100 компьютеры 192.168.1.0/24 влан 101 Свичпорт сейчас показывает только таблицу соседних цисок (вложенная картинка) Можно ли , что бы показывал все устройства ну или хотя бы только компы.?
  13. Спасибо. Реализация для CentOS чем нибудь отмечается? что нужно подправить? В чем разница между network_id, object_name ,
×
×
  • Создать...