Kycherr Posted September 11, 2015 Posted September 11, 2015 Доброго часу дня. Можливо хтось стикався з таким питанням. Є потреба дивитися мак абонета по snmp. Аналог в консолі : sh epon interface ePON 0/3:50 onu mac address-table Але не можу знайти потрібного oid. Можливо хтось підкаже.? Дякую наперед.
dan_aspire Posted September 11, 2015 Posted September 11, 2015 (edited) Kycherr Вменяемо не заставил это заработать, поэтому снимаю телнет соединением из пхп Edited September 11, 2015 by dan_aspire
Ромка Posted September 11, 2015 Posted September 11, 2015 Kycherr Вменяемо не заставил это заработать, поэтому снимаю телнет соединением из пхп Скриптиком не поделитесь?
_Maks_ Posted September 11, 2015 Posted September 11, 2015 Kycherr Вменяемо не заставил это заработать, поэтому снимаю телнет соединением из пхп И не сильно ли это грузит голову?
dan_aspire Posted September 11, 2015 Posted September 11, 2015 (edited) Ромка скрипт - часть самописной системы мониторинга и контроля, так что думаю недостающие переменные поймёте где взять. Если остальное интересно - в ЛС. <?php $username = "$telnet_user"; $password = "$telnet_pass"; $con = pfsockopen($ip, 23, $errno, $errstr, 10); $login = $username."\r\n"; fwrite($con, $login); $pass = $password."\r\n"; fwrite($con, $pass); $command = "enable\r\n"; sleep(1); fwrite($con, $command); sleep(1); fwrite($con,"\r\n"); sleep(2); fwrite($con, "show mac a int $nameint \r\n"); sleep(2); $out = fread($con, 16536); $out = end(explode(' -----', $out)); $arr_out = explode("\n", $out); while (trim(array_pop($arr_out)) == "--More--") { fwrite($con, chr(32)); sleep(2); $arr_tmp = explode("\r\n", fread($con, 16536)); $arr_out = array_merge($arr_out,$arr_tmp); } fclose($con); $count = 0; echo "<table border=\"0\" cellspacing=\"5\">"; while ($count <= count($arr_out)) { $out_mac = $arr_out[$count]; $out_mac = explode('DYN', $out_mac); $out_mac = $out_mac[0]; $out_mac = ltrim($out_mac, "0..9"); $out_mac = trim($out_mac); $out_mac = substr($out_mac, -14); $us_mac = str_replace(".", "", "$out_mac"); $us_mac = str_replace("a", "A", "$us_mac"); $us_mac = str_replace("b", "B", "$us_mac"); $us_mac = str_replace("c", "C", "$us_mac"); $us_mac = str_replace("d", "D", "$us_mac"); $us_mac = str_replace("e", "E", "$us_mac"); $us_mac = str_replace("f", "F", "$us_mac"); echo "<tr><td><div style=\"display: table-cell; vertical-align: middle; \">"; $us_formatted_mac = preg_replace('~..(?!$)~', '\0:', $us_mac); echo $us_formatted_mac; echo "</div></td><td> </td><td>"; if ($us_mac == NULL) { }else if ($us_mac == str_replace(":", "", $mac)) { echo "<font color=\"lightgreen\">THIS ONU</font>"; } else if ($use_userside == "yes") { include 'get_us_mac_data.php'; echo $us_mac_out; echo "</td><td> </td><td><div style=\"display: table-cell; vertical-align: middle; \">"; if ($us_mac_type == 1) { echo "<a href=\"fix_onu.php?olt=$ip&mac=$mac&code=$us_usercode\">Закрепить</a>"; } else { } } else { } echo "</td></tr>"; $count = $count + 1; } echo "</table>"; ?> Edited September 11, 2015 by dan_aspire
dan_aspire Posted September 11, 2015 Posted September 11, 2015 _Maks_нет, так же, как и обычная команда. По крайней мере в моём случае, у меня опрашивается только определенный интерфейс (в карточке ОНУ) запросом по ссылке.
Kycherr Posted September 14, 2015 Author Posted September 14, 2015 (edited) Зараз покищо так.. Відомі oid можу викласти... Але є ще роботи море..) Все працює по snmp. Редагувати можна підпис ону, влан, та обмеження швидкості. Камінням чур не кидати ) Edited September 14, 2015 by Kycherr
Ромка Posted September 14, 2015 Posted September 14, 2015 Зараз покищо так.. Відомі oid можу викласти... Але є ще роботи море..) Все працює по snmp. Редагувати можна підпис ону, влан, та обмеження швидкості. Камінням чур не кидати ) Конечно выкладывай, лишним не будет.
Kycherr Posted September 14, 2015 Author Posted September 14, 2015 (edited) Name/OID: .1.3.6.1.2.1.155.1.4.1.5.1.2.12; Value (Integer): -213 - ділим на 10 щоб отримати норм значеня Name/OID: .1.3.6.1.2.1.31.1.1.1.18.12; Value (OctetString): byndyuchna -- підпис ону Name/OID: .1.3.6.1.4.1.3320.101.10.5.1.5 - RX POWER Name/OID: .1.3.6.1.4.1.3320.101.10.5.1.6 - TX POWER Name/OID: .1.3.6.1.4.1.3320.101.10.1.1.27.12; Value (Integer): 2257 - Відстань до ону Name/OID: .1.3.6.1.4.1.3320.101.12.1.1.3.12.1 - Vlan onu Edited September 14, 2015 by Kycherr
Kycherr Posted September 14, 2015 Author Posted September 14, 2015 <?php $p = $_POST["port"]; $d = $_POST["des"]; require_once "PHPTelnet.php"; $telnet = new PHPTelnet(); $result = $telnet->Connect('ip','log','pas'); if ($result == 0) { $telnet->DoCommand('ena', $result); $telnet->DoCommand('fiber', $result); $telnet->DoCommand('conf', $result); $telnet->DoCommand("interface ePON 0/"."$p", $result); $telnet->DoCommand("desc "."$d", $result); $telnet->DoCommand('epon onu port 1 ctc vlan mode tag 120', $result); $telnet->DoCommand('epon onu port 1 ctc loopback detect', $result); $telnet->DoCommand('ex', $result); $telnet->DoCommand('ex', $result); $telnet->DoCommand('wr', $result); echo "Все готово"; $telnet->Disconnect(); } ?> </body> Така конструкція була.. Але довго відпрацьовує на великих головах. Потім така але тяжко до веба прикрутити... #!/bin/bash host=$1 (expect -c " set timeout 20 spawn telnet $ip expect \"Username:\" send \"log\r\" expect \"Password:\" send \"pas\r\" expect \"*>\" send \"enable\r\" expect \"password:\" send \"fiber\r\" expect \"Switch#\" send \"sh epon active-onu\r\" expect \"Switch#\" send \"ex\r\" send \"ex\r\" interact exit ") А зараз snmp. прикручується на ура і по продуктивності літає... Не грузить взагалі...
DyadyaJack Posted September 14, 2015 Posted September 14, 2015 Доброго часу дня. Можливо хтось стикався з таким питанням. Є потреба дивитися мак абонета по snmp. Аналог в консолі : sh epon interface ePON 0/3:50 onu mac address-table Але не можу знайти потрібного oid. Можливо хтось підкаже.? Дякую наперед. по моему вменяемого oid что бы найти так и не нашел. есть .1.3.6.1.4.1.3320.152.1.1.3 вываливает маки на всех интерфейсах и портах, но отрабоатывает долго на средне загруженой голове в формате .1.3.6.1.4.1.3320.152.1.1.3.<порт>.<влан>.<мак в десятичном представлении> .1.3.6.1.4.1.3320.152.1.1.3.35.197.144.239.104.252.183.137 "90 EF 68 FC B7 DD " .1.3.6.1.4.1.3320.152.1.1.3.36.1.252.250.247.43.132.103 "FC FA F7 2B DD67 " Видно что на каждом порту по 2 мака - онушки и головы. В принцыпе можно также все существующие вланы забрать .1.3.6.1.2.1.17.7.1.4.2.1.2.0 Но от этого не легче. Так как отрабатывает очень долго, ну секунд до 10-20 на одной голове. Мак онушки же найти не проблема. .1.3.6.1.4.1.3320.152.1.1.1.13.1.252.250.247.14.82.22 13 .1.3.6.1.4.1.3320.152.1.1.1.13.<влан, практически всегда 1>.<мак в десятичном представлении(например 252.250.247.14.82.22)> даст порт на котором светится мак онушки, напррмер 13 .1.3.6.1.4.1.3320.9.64.4.1.1.2.13 "EPON0/1:2" спрашиваем как называется интерфейс, в данном случае - "EPON0/1:2" Как вариант думаю разве что в цикле снимать все маки с таблицу например командой .1.3.6.1.4.1.3320.152.1.1.1.<ноимер порта> а дальше уже в ней смотреть. Если у когото более элегантное решение есть - поделитесь.
Kycherr Posted September 14, 2015 Author Posted September 14, 2015 (edited) <?php $ifVendor = snmpwalk("$host120", "$com120", ".1.3.6.1.4.1.3320.101.10.1.1.1"); $ifDescr = snmpwalk("$host120", "$com120", 'IF-MIB::ifAlias'); $ifSignal = snmpwalk("$host120", "$com120", "enterprises.3320.101.10.5.1.5"); $ifOnuMac = snmpwalk("$host120", "$com120", "1.3.6.1.4.1.3320.101.10.1.1.3"); $array = $ifVendor; for($i = 0, $c = count($array); $i < $c; $i++){ ?> <tr> <td class="text-center"><?php print str_replace("STRING:", "", $ifVendor[$i]);?></td> <td class="text-center"><?php print str_replace("STRING:", "", $ifDescr[$i]);?></td> <td class="text-center"><?php print trim (str_replace("INTEGER:", "", $ifSignal[$i])/10);?></td> <td class="text-center"><?php print str_replace("Hex-STRING:", "", $ifOnuMac[$i]);?></td> <td class="text-center"> <div class="btn-group"> <button class="btn btn-xs btn-default" type="button" data-toggle="modal" data-target="#modal-popin" title="Переглянути інфо"><i class="fa fa-crosshairs"></i></button> <button class="btn btn-xs btn-default" type="button" data-toggle="tooltip" title="Видалити"><i class="fa fa-times"></i></button> </div> </td> </tr> <?php } ?> Пока таким макаром... $sig = snmpget("$ip", $communit, "enterprises.3320.101.10.5.1.5.$key"); где $key будет индексом кто все ровняет.. Но реализовать не могу Edited September 14, 2015 by Kycherr
dan_aspire Posted September 14, 2015 Posted September 14, 2015 (edited) Зараз покищо так.. Відомі oid можу викласти... Але є ще роботи море..) Все працює по snmp. Редагувати можна підпис ону, влан, та обмеження швидкості. Камінням чур не кидати ) У нас так: автоопрос олтов по cron'у, получение маков, уровней сигнала, имён интерфейсов, сохранение всего этого в sql. Можно указать описание ONU или вместо него объект из БД USERSIDE. в карточке ONU управление вланами на портах, указание ону на карте, история сигналов по онушке, получение расстояния, фдб таблица по этой ону и возможность ребута онушки. Edited September 14, 2015 by dan_aspire
FonOdinus Posted September 14, 2015 Posted September 14, 2015 А что это у Вас за софт такой? Интересно
dan_aspire Posted September 15, 2015 Posted September 15, 2015 А что это у Вас за софт такой? Интересно Сами сооружали) разрослось со странички со списком онушек с уровнем сигналов, получаемых экспектом. Сейчас все по снмп, кроме фдб таблицы. Подробнее - стучитесь в личку.
Kycherr Posted September 15, 2015 Author Posted September 15, 2015 Зараз покищо так.. Відомі oid можу викласти... Але є ще роботи море..) Все працює по snmp. Редагувати можна підпис ону, влан, та обмеження швидкості. Камінням чур не кидати ) У нас так: автоопрос олтов по cron'у, получение маков, уровней сигнала, имён интерфейсов, сохранение всего этого в sql. Можно указать описание ONU или вместо него объект из БД USERSIDE. в карточке ONU управление вланами на портах, указание ону на карте, история сигналов по онушке, получение расстояния, фдб таблица по этой ону и возможность ребута онушки. Гарно вийшло... В ЛС. Поділетесь сорцами? Щоб своє допиляти
DyadyaJack Posted October 6, 2015 Posted October 6, 2015 Зараз покищо так.. Відомі oid можу викласти... Але є ще роботи море..) Все працює по snmp. Редагувати можна підпис ону, влан, та обмеження швидкості. Камінням чур не кидати ) xчасом це не цей файлик? http://my-files.ru/3bghbs
ynet Posted October 6, 2015 Posted October 6, 2015 Да интересная программа получается, если можно и со мной поделитесь в личку. Пишу софт для себя. Но делаю все это через телнет (долго если на прямую, а не с бд)
Ksail Posted October 6, 2015 Posted October 6, 2015 Ну и мне в личку если можно. Сейчас мониторится заббиксом, но не всегда удобно лезть в этот комбайн.
Пэтро Posted October 8, 2015 Posted October 8, 2015 <?php $host = '10.0.0.1'; $community = 'public'; //Olt $ponIfIndex = 'iso.3.6.1.4.1.3320.101.6.1.1.1'; $llidSequenceNo = 'iso.3.6.1.4.1.3320.101.6.1.1.2'; $ifDescr = 'iso.3.6.1.2.1.2.2.1.2'; ///Onu $onuIndexoid = 'iso.3.6.1.4.1.3320.101.10.5.1.1'; $onuIDoid = 'iso.3.6.1.4.1.3320.101.10.1.1.3'; $onuActivePonDiidoid = 'iso.3.6.1.4.1.3320.101.10.1.1.64'; ///Onu $onuStatusoid = 'iso.3.6.1.4.1.3320.101.10.1.1.26'; $onuDistanceoid = 'iso.3.6.1.4.1.3320.101.10.1.1.27'; $onuVendorIDoid = 'iso.3.6.1.4.1.3320.101.10.1.1.1'; $opModuleTempoid = 'iso.3.6.1.4.1.3320.101.10.5.1.2'; $opModuleRxPoweroid = 'iso.3.6.1.4.1.3320.101.10.5.1.5'; $opModuleTxPoweroid = 'iso.3.6.1.4.1.3320.101.10.5.1.6'; ///FDB $ifFdbReadByPortMacAddressoid = 'iso.3.6.1.4.1.3320.152.1.1.3'; // $a_onu_id = snmprealwalk($host, $community, $onuIndexoid); $a_onu_id = snmprealwalk($host, $community, $onuActivePonDiidoid); var_dump($a_onu_id); foreach ($a_onu_id as $onuIndex_oid=>$onu_port_id) { // sleep(10); $onu_port_id = str_replace("INTEGER: ","",$onu_port_id); // $onuIndex= str_replace($onuIndexoid.".", "", $onuIndex_oid); $onuIndex = str_replace($onuActivePonDiidoid.".","",$onuIndex_oid); // if($onuIndex==27) continue; // if($onuIndex==32) continue; $item['host'] = $host; $item['onuIndex'] = str_replace(" ", "", str_replace("STRING: ","", snmpget($host, $community, $ifDescr.".".$onuIndex))); $item['onuPortIndex'] = $onu_port_id-7; $item['onuID'] = str_replace(" ", "", str_replace("Hex-STRING: ","", snmpget($host, $community, $onuIDoid.".".$onuIndex))); $temp = 0; $temp= str_replace("INTEGER: ","", snmpget($host, $community, $opModuleTempoid.".".$onuIndex)); if(!$temp){ echo "sleep 30"; // sleep(30); } $item['opModuleTemp'] = $temp / 256; $rxPower= str_replace("INTEGER: ","", snmpget($host, $community, $opModuleRxPoweroid.".".$onuIndex)); $txPower= str_replace("INTEGER: ","", snmpget($host, $community, $opModuleTxPoweroid.".".$onuIndex)); $item['opModuleRxPower'] = 0; $item['opModuleRxPower'] = $rxPower /10; $item['opModuleTxPower'] = 0; $item['opModuleTxPower'] = $txPower /10; $item['onuVendorID'] = ''; $item['onuVendorID'] = str_replace('"', '', str_replace("STRING: ","", snmpget($host, $community, $onuVendorIDoid.".".$onuIndex))); $item['onuDistance'] = 0; $item['onuDistance'] = str_replace("INTEGER: ","", snmpget($host, $community, $onuDistanceoid.".".$onuIndex)); $item['onuStatus'] = 0; $item['onuStatus'] = str_replace("INTEGER: ","", snmpget($host, $community, $onuStatusoid.".".$onuIndex)); $a_ifFdbReadByPortMacAddress= snmpwalk($host, $community, $ifFdbReadByPortMacAddressoid.".".$onuIndex); echo "oid-> ".$ifFdbReadByPortMacAddressoid.".".$onuIndex."\n"; $MacAddress_val = ""; $address = ""; foreach ($a_ifFdbReadByPortMacAddress as $MacAddress_oid=>$MacAddress_val){ $address= str_replace(" ", "",str_replace("Hex-STRING: ","", $MacAddress_val)); echo "mac: ".$address."\n"; if ($address<>$item['onuID'] and $address<>"") $item['ifFdbReadByPortMacAddress'] = $address; } $query="SELECT name FROM users LEFT JOIN ipaddr ON users.id = ipaddr.user_id where mac='$address'"; $result=mysql_query($query,$res); $name = mysql_result($result,0); // var_dump($item); $query = "select id from hardware_pon_onu where onu_mac='$item[onuID]'"; echo $query."\n"; $id = 0; $result=mysql_query($query,$res); echo "res ".$result."\n"; if(mysql_num_rows($result)){ $id = mysql_result($result,0); echo "id ".$id."\n"; $query = "UPDATE hardware_pon_onu set onu_owner='$name', onu_fdb_mac='$item[ifFdbReadByPortMacAddress]', onu_port_name='$item[onuIndex]', onu_vendor='$item[onuVendorID]', onu_status=$item[onuStatus], olt_host='$item[host]', port_id=$item[onuPortIndex], onu_distance=$item[onuDistance], onu_rxpower=$item[opModuleRxPower], onu_temp=$item[opModuleTemp] where onu_mac='$item[onuID]'"; echo $query."\n"; $result=mysql_query($query,$res); } else{ $query = "INSERT INTO hardware_pon_onu set onu_owner='$name', onu_fdb_mac='$item[ifFdbReadByPortMacAddress]', onu_port_name='$item[onuIndex]', onu_vendor='$item[onuVendorID]', onu_status=$item[onuStatus], olt_host='$item[host]', port_id=$item[onuPortIndex], onu_distance=$item[onuDistance], onu_rxpower=$item[opModuleRxPower], onu_temp=$item[opModuleTemp], onu_mac='$item[onuID]'"; echo $query."\n"; $result=mysql_query($query,$res); } // } } ?>
ynet Posted October 22, 2015 Posted October 22, 2015 Ну как бы можно и самому написать запрос насоздание таблички))
Пэтро Posted October 26, 2015 Posted October 26, 2015 (edited) -- -- Table structure for table `hardware_pon_onu` -- DROP TABLE IF EXISTS `hardware_pon_onu`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `hardware_pon_onu` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `onu_mac` varchar(18) DEFAULT NULL, `onu_status` smallint(5) unsigned DEFAULT '0', `onu_distance` mediumint(5) unsigned DEFAULT '0', `onu_vendor` varchar(4) DEFAULT NULL, `onu_temp` mediumint(5) unsigned DEFAULT '0', `onu_rxpower` mediumint(5) DEFAULT '0', `onu_fdb_mac` varchar(18) DEFAULT NULL, `olt_host` varchar(18) DEFAULT NULL, `olt_id` mediumint(5) unsigned DEFAULT NULL, `port_id` mediumint(5) unsigned DEFAULT NULL, `onu_port_name` varchar(12) DEFAULT NULL, `onu_owner` varchar(18) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=442 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; Edited October 26, 2015 by Пэтро
Kycherr Posted November 19, 2015 Author Posted November 19, 2015 <?php $roww = htmlspecialchars($_GET["row"]); $index = $roww; $session = new SNMP(SNMP::VERSION_2C, 'ip', 'public', 10000000); $session->oid_increasing_check = false; $session->valueretrieval = SNMP_VALUE_PLAIN; $data = $session->walk('iso.3.6.1.4.1.3320.152.1.1.3.' . $index); $dd = array(); $matches = array(); foreach ($data as $key => $value) { preg_match('/^\w+-\w+::\w+.(\d+.){6}(\d+)/', $key, $matches); $m = array(); for ($i = 0; $i < strlen($value); $i++) { $m[] = bin2hex($value[$i]); } $mac = implode(":", $m); $dd[] = array('Влан ' => $matches[2], ' Мак' => $mac); } function array2table($array, $recursive = false, $null = ' ') { // Sanity check if (empty($array) || !is_array($array)) { return false; } if (!isset($array[0]) || !is_array($array[0])) { $array = array($array); } // Поч. Таблиці $table = "<table table-bordered table-striped table-header-bg>\n"; // Хідер $table .= "</tr>\n"; $table .= "\t<tr>"; // Take the keys from the first row as the headings foreach (array_keys($array[0]) as $heading) { $table .= '<th> ' . $heading . ' </th>'; } // Основа foreach ($array as $row) { $table .= "\t<tr>" ; foreach ($row as $cell) { $table .= '<td>'; // Перебір об. if (is_object($cell)) { $cell = (array) $cell; } if ($recursive === true && is_array($cell) && !empty($cell)) { // Рекурс $table .= "\n" . array2table($cell, true, true) . "\n"; } else { $table .= (strlen($cell) > 0) ? htmlspecialchars((string) $cell) : $null; } $table .= '</td>'; } $table .= "</tr>\n"; } $table .= '</table>'; return $table; } echo array2table($dd); Для перегляду маків за ОНУ. Можливо комусь пригодиться
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now