Jump to content

Recommended Posts

Posted

Доброго часу дня.

Можливо хтось стикався з таким питанням.

Є потреба дивитися мак абонета по snmp.

Аналог в консолі : sh epon interface ePON 0/3:50 onu mac address-table 

Але не можу знайти потрібного oid.

Можливо хтось підкаже.? 

Дякую наперед.

Posted (edited)

Kycherr

 

Вменяемо не заставил это заработать, поэтому снимаю телнет соединением из пхп

Edited by dan_aspire
Posted

Kycherr

 

Вменяемо не заставил это заработать, поэтому снимаю телнет соединением из пхп

Скриптиком не поделитесь?
Posted

Kycherr

 

Вменяемо не заставил это заработать, поэтому снимаю телнет соединением из пхп

 

И не сильно ли это грузит голову?

Posted (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 by dan_aspire
Posted
_Maks_

нет, так же, как и обычная команда. По крайней мере в моём случае, у меня опрашивается только определенный интерфейс (в карточке ОНУ) запросом по ссылке.

Posted (edited)

Зараз покищо так.. Відомі oid можу викласти... Але є ще роботи море..)

Все працює по snmp. Редагувати можна підпис ону, влан, та обмеження швидкості.

Камінням чур не кидати )

post-34239-0-22924400-1442220268_thumb.png

Edited by Kycherr
Posted

Зараз покищо так.. Відомі oid можу викласти... Але є ще роботи море..)

Все працює по snmp. Редагувати можна підпис ону, влан, та обмеження швидкості.

Камінням чур не кидати )

Конечно выкладывай, лишним не будет.

Posted (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 by Kycherr
Posted
<?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. прикручується на ура і по продуктивності літає... Не грузить взагалі...

Posted

Доброго часу дня.

Можливо хтось стикався з таким питанням.

Є потреба дивитися мак абонета по 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.<ноимер порта>

а дальше уже в ней смотреть.

 

Если у когото более элегантное решение есть - поделитесь.

Posted (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 by Kycherr
Posted (edited)

Зараз покищо так.. Відомі oid можу викласти... Але є ще роботи море..)

Все працює по snmp. Редагувати можна підпис ону, влан, та обмеження швидкості.

Камінням чур не кидати )

У нас так: автоопрос олтов по cron'у, получение маков, уровней сигнала, имён интерфейсов, сохранение всего этого в sql. Можно указать описание ONU или вместо него объект из БД USERSIDE. в карточке ONU управление вланами на портах, указание ону на карте, история сигналов по онушке, получение расстояния, фдб таблица по этой ону и возможность ребута онушки.

post-16884-0-20683300-1442256598_thumb.jpg

post-16884-0-49522500-1442256598_thumb.jpg

post-16884-0-73464000-1442256598_thumb.jpg

Edited by dan_aspire
Posted

А что это у Вас за софт такой? Интересно :)

Сами сооружали) разрослось со странички со списком онушек с уровнем сигналов, получаемых экспектом. Сейчас все по снмп, кроме фдб таблицы. Подробнее - стучитесь в личку.
Posted

 

Зараз покищо так.. Відомі oid можу викласти... Але є ще роботи море..)

Все працює по snmp. Редагувати можна підпис ону, влан, та обмеження швидкості.

Камінням чур не кидати )

У нас так: автоопрос олтов по cron'у, получение маков, уровней сигнала, имён интерфейсов, сохранение всего этого в sql. Можно указать описание ONU или вместо него объект из БД USERSIDE. в карточке ONU управление вланами на портах, указание ону на карте, история сигналов по онушке, получение расстояния, фдб таблица по этой ону и возможность ребута онушки.

 

 

Гарно вийшло... В ЛС. Поділетесь сорцами? Щоб своє допиляти

  • 3 weeks later...
Posted

Зараз покищо так.. Відомі oid можу викласти... Але є ще роботи море..)

Все працює по snmp. Редагувати можна підпис ону, влан, та обмеження швидкості.

Камінням чур не кидати )

xчасом це не цей файлик? http://my-files.ru/3bghbs

Posted

Да интересная программа получается, если можно и со мной поделитесь в личку. Пишу софт для себя. Но делаю все это через телнет (долго если на прямую, а не с бд)

Posted

Ну и мне в личку если можно. Сейчас мониторится заббиксом, но не всегда удобно лезть в этот комбайн.

Posted


<?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);
}

// }
}
?>

 

  • 2 weeks later...
Posted

Ну как бы можно и самому написать запрос насоздание таблички))

Posted (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 by Пэтро
  • 4 weeks later...
Posted
		<?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);
		

Для перегляду маків за ОНУ. Можливо комусь пригодиться

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...