Перейти до

BDCOM ONU user mac oid snmp


Kycherr

Рекомендованные сообщения

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

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

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

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

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

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

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

Ссылка на сообщение
Поделиться на других сайтах

Kycherr

 

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

Відредаговано dan_aspire
Ссылка на сообщение
Поделиться на других сайтах

Kycherr

 

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

Скриптиком не поделитесь?
Ссылка на сообщение
Поделиться на других сайтах

Kycherr

 

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

 

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

Ссылка на сообщение
Поделиться на других сайтах

Ромка

скрипт - часть самописной системы мониторинга и контроля, так что думаю недостающие переменные поймёте где взять. Если остальное интересно - в ЛС.

<?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>";
?>
Відредаговано dan_aspire
Ссылка на сообщение
Поделиться на других сайтах
_Maks_

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

Ссылка на сообщение
Поделиться на других сайтах
Опубліковано: (відредаговано)

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

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

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

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

Відредаговано Kycherr
Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

Ссылка на сообщение
Поделиться на других сайтах
Опубліковано: (відредаговано)
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

Відредаговано Kycherr
Ссылка на сообщение
Поделиться на других сайтах
<?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. прикручується на ура і по продуктивності літає... Не грузить взагалі...

Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

 

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

Ссылка на сообщение
Поделиться на других сайтах
Опубліковано: (відредаговано)
<?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 будет индексом кто все ровняет.. Но реализовать не могу

Відредаговано Kycherr
Ссылка на сообщение
Поделиться на других сайтах

Зараз покищо так.. Відомі 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

Відредаговано dan_aspire
Ссылка на сообщение
Поделиться на других сайтах

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

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

 

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

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

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

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

 

 

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

Ссылка на сообщение
Поделиться на других сайтах
  • 3 weeks later...

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

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

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

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

Ссылка на сообщение
Поделиться на других сайтах

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

Ссылка на сообщение
Поделиться на других сайтах


<?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...

--
-- 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 */;
Відредаговано Пэтро
Ссылка на сообщение
Поделиться на других сайтах
  • 4 weeks later...
		<?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);
		

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

Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

  • Схожий контент

    • Від legenda vols
      Всем привет, заезженная тема но приходиться искать по всем уголкам интернета - А именно OID и как их использовать.
      Начнём. 
      для новичков.
      bash 
      set_olt_oids() {
          # Общие для EPON (BDCOM)
          if [[ "$1" =~ ^(P3310|P3310B|P3310C|P3608|P3608B|P3316|P3600-16E|P3608-2TE|P3616-2TE|IEP3310)$ ]]; then
              OID_GET_MAC="1.3.6.1.4.1.3320.101.10.4.1.1"
              OID_VENDOR_ONU="1.3.6.1.4.1.3320.101.10.1.1.1"
              OID_MODEL_ONU="1.3.6.1.4.1.3320.101.10.1.1.2"
              OID_TEMP_ONU="1.3.6.1.4.1.3320.101.10.5.1.2"
              OID_AUNT_ONU_STATUS="SNMPv2-SMI::enterprises.3320.101.10.1.1.26"
              OID_UPTIME_ONU="1.3.6.1.4.1.3320.101.10.1.1.80"
              OID_DIST="1.3.6.1.4.1.3320.101.10.1.1.27"
              OID_IF_MAC10="1.3.6.1.4.1.3320.101.11.1.1.3"
              OID_IFindexmac10="1.3.6.1.4.1.3320.101.11.1.1.1"
              LASTREG_DATE="1.3.6.1.4.1.3320.101.11.1.1.9"
              LASTDEREG_DATE="1.3.6.1.4.1.3320.101.11.1.1.10"
              LASTDEREG_REASON="1.3.6.1.4.1.3320.101.11.1.1.11" 
              OID_ONU_ETH="1.3.6.1.4.1.3320.101.12.1.1.8"
              OID_PORT_INDEX="1.3.6.1.4.1.3320.101.107.1.1" # oid возвращает все индексы ПОН портов, работает не везде
              OID_GEPORT_COUNT="1.3.6.1.4.1.3320.101.10.1.1.12"
              OID_FEPORT_COUNT="1.3.6.1.4.1.3320.101.10.1.1.14"
              OID_REBOOT_ONU="1.3.6.1.4.1.3320.101.10.1.1.29" # snmpset -v2c -c RW IP OID.onuIndex i 0 reboot
              OID_DEL_ONU="SNMPv2-SMI::enterprises.3320.101.11.1.1.2" #.$portID.$mac10" i 0 #mac decimal onu
          fi
          # Общие для GPON
          if [[ "$1" =~ ^(GP3600-08|GP3600-16B|GP3600-08B)$ ]]; then
              ETH_STATUS="1.3.6.1.2.1.2.2.1.8" # статус порта 1 портовая ону
              ETH_STATUS4="1.3.6.1.4.1.3320.10.4.1.1.4" # статус портов 4х портовая ону
              OID_VENDOR_ONU="1.3.6.1.4.1.3320.10.3.1.1.2"
              OID_ADMIN_STATUS="1.3.6.1.4.1.3320.10.4.1.1.3"
              OID_DOWN_REASON="1.3.6.1.4.1.3320.10.3.1.1.35"
              OID_DIST="1.3.6.1.4.1.3320.10.3.1.1.33"
              OID_MODEL_ONU="1.3.6.1.4.1.3320.10.3.1.1.9"
              OID_VENDOR_ONU="1.3.6.1.4.1.3320.10.3.1.1.2"
              OID_REBOOT_ONU="1.3.6.1.4.1.3320.10.3.2.1.4" #snmpset -v2c -c RW IP OID.onuIndex i 1 reboot
              
          fi
          # Уникальные параметры для моделей
          case "$1" in
              # EPON модели
              P3310 | P3310B)
                  OID_RX_ONU="1.3.6.1.4.1.3320.101.10.5.1.6"
                  OID_RX_OLT="1.3.6.1.4.1.3320.9.183.1.1.5"
                  OID_PORT_LIST="1.3.6.1.4.1.3320.101.107.1.1"
                  ;;
              IEP3310)
                  OID_RX_ONU="1.3.6.1.4.1.3320.101.10.5.1.5"
                  OID_RX_OLT="1.3.6.1.4.1.3320.9.183.1.1.5"
                  OID_TX_ONU="1.3.6.1.4.1.3320.101.10.5.1.6"
                  ;;
              P3608 | P3608B | P3310C | P3316 | P3600-16E | P3608-2TE | P3616-2TE)
                  OID_RX_ONU="1.3.6.1.4.1.3320.101.10.5.1.5"
                  OID_RX_OLT="1.3.6.1.4.1.3320.101.108.1.3"
                  OID_TX_ONU="1.3.6.1.4.1.3320.101.10.5.1.6"
                  OID_PORT_LIST="1.3.6.1.4.1.3320.101.107.1.1"
                  ;;
              # GPON модели
              GP3600-08 | GP3600-16B | GP3600-08B | P3600-08E)
                  OID_RX_ONU="1.3.6.1.4.1.3320.10.3.4.1.2"
                  OID_RX_OLT="1.3.6.1.4.1.3320.10.2.3.1.3"
                  OID_TX_ONU="1.3.6.1.4.1.3320.10.3.4.1.3"
                  OID_GET_MAC="1.3.6.1.4.1.3320.10.3.1.1.4"
                  ;;
              *)
                  echo -e "\e[1;91mНеизвестный режим OLT: $1\e[0m"
                  return 1
                  ;;
          esac
          return 0
      }
      что бы было понятно в дальнейшем что за переменные 
      snmp1="snmpwalk -v2c -c паблик стринг"
      snmp2="snmpwalk -v2c -Ouqv -c паблик стринг"
      snmp3="snmpget -v2c -c паблик стринг"
      snmp3q="snmpget -v2c -Ouqv -c паблик стринг"
      snmp4="snmpget -v2c -Ouqv -c приват стринг"
      snmp5="snmpset -v2c -c приват стринг"

      EPON GEPON
      1- OID_GET_MAC="1.3.6.1.4.1.3320.101.10.4.1.1" на бдкомах епон 
      = SNMPv2-SMI::enterprises.3320.101.10.4.1.1.96 = Hex-STRING: A0 94 6A 97 CC 50
      snmp_response=$($snmp3 "$IP" "$OID_GET_MAC.$1" 2>/dev/null | awk -F'Hex-STRING: ' '{print tolower($2)}' | tr -d ' ')
          onu_mac=$(echo "$snmp_response" | sed 's/\(..\)/\1:/g;s/:$//') #Переводим в человеческий вид
          mac10=$(echo "$snmp_response" | awk '{    # Переводим в mac10 дада способов есть миллиард.
              for (i=1; i<=length; i+=2) {
                  printf "%d", strtonum("0x" substr($0, i, 2))
                  if (i + 2 <= length) printf "."
              }
              print ""
          }')

      лучший способ сделать функцию для форматирования снмп запросов в зависимости от типов STRING / HEX-STRING / COUNTER32 и тд тп.

      ifID=$($snmp1 "$IP" "$OID_IF_MAC10" 2>/dev/null | awk -v mac="$mac10" '$0 ~ mac {split($1, arr, "."); print arr[length(arr)-6]; exit}') 


      2 - OID_VENDOR_ONU="1.3.6.1.4.1.3320.101.10.1.1.1"
      тут без лишних слов возвращает вендор онушек 
      SNMPv2-SMI::enterprises.3320.101.10.1.1.1.97 = STRING: "XPON"   если укажем параметр -Oqv  или -Ouqv получим просто "XPON" и надо будет лишь сделать | tr -d ' " '    что бы удалить лапки.

      3 - OID_MODEL_ONU="1.3.6.1.4.1.3320.101.10.1.1.2" аналогично вендорам, получаем модель.

      4- OID_TEMP_ONU="1.3.6.1.4.1.3320.101.10.5.1.2"  - температура ону делим на / 256
      SNMPv2-SMI::enterprises.3320.101.10.5.1.2.17 = INTEGER: 7027  
      temp_onu=$($snmp3q $IP 1.3.6.1.4.1.3320.101.10.5.1.2.$INDEX | awk '{printf "%.2f", $1/265}' 2>/dev/null)

      5 - OID_AUNT_ONU_STATUS="1.3.6.1.4.1.3320.101.10.1.1.26"
      SNMPv2-SMI::enterprises.3320.101.10.1.1.26.276 = INTEGER: 3

      onuAunt_type=$($snmp3q $IP "$OID_AUNT_ONU_STATUS.$INDEX" 2>/dev/null)
          case "$onuAunt_type" in
              0) onuAunt_type_txt="authenticated" ;;
              1) onuAunt_type_txt="registered" ;;
              2) onuAunt_type_txt="deregistered" ;;
              3) onuAunt_type_txt="auto_config" ;;
              4) onuAunt_type_txt="lost" ;;
              *) onuAunt_type_txt="unknown" ;;
          esac

      6 - OID_UPTIME_ONU="1.3.6.1.4.1.3320.101.10.1.1.80" uptime
      SNMPv2-SMI::enterprises.3320.101.10.1.1.80.207 = INTEGER: 290907
      timetick 
      | awk '{h=int($1/3600); m=int(($1%3600)/60); s=$1%60; printf "AliveTime: %dч %dмин %dсек\n", h, m, s}')${reset}"

      7 - OID_DIST="1.3.6.1.4.1.3320.101.10.1.1.27"
      SNMPv2-SMI::enterprises.3320.101.10.1.1.27.149 = INTEGER: 1600
      на епоне в метрах  на гпоне делим на 10

      8 - OID_IF_MAC10="1.3.6.1.4.1.3320.101.11.1.1.3"
      SNMPv2-SMI::enterprises.3320.101.11.1.1.3.14.60.21.18.8.130.175 = Hex-STRING: 3C 15 12 08 82 AF  
      SNMPv2-SMI::enterprises.3320.101.11.1.1.3      .14-PORTINDEX     60.21.18.8.130.175  - MAC10                = Hex-STRING: MAC HEX

      9- OID_IFindexmac10="1.3.6.1.4.1.3320.101.11.1.1.1"
      SNMPv2-SMI::enterprises.3320.101.11.1.1.1.125.60.21.18.6.227.186 = INTEGER: 125
      SNMPv2-SMI::enterprises.3320.101.11.1.1.1.125.60.21.18.6.247.136 = INTEGER: 125
      возвращает PORT INDEX и можно грепнуть по mac10 найти индекс и можно грепнуть через мак10

      10 - LASTREG_DATE="1.3.6.1.4.1.3320.101.11.1.1.9"
      дату отдаёт в хексе. надо декодировать это дело.
      вызов snmp + IP + oid + PORTINDEX + MAC10 
      date_hex=$($snmp1 $IP "$LASTREG_DATE.$IF_INDEX.$mac10" 2>/dev/null | awk -F': ' '{print $2}' | tr -d ' ')
      if [[ -n "$date_hex" ]]; then
              # Преобразуем дату из hex в числовое представление
              data=($(echo "$date_hex" | sed 's/../0x& /g'))
              local year=$((data[0] * 256 + data[1]))
              local month=${data[2]}
              local day=${data[3]}
              local hour=${data[4]}
              local minute=${data[5]}
              local second=${data[6]}


      local formatted_date=$(printf "%04d-%02d-%02d %02d:%02d:%02d" "$year" "$month" "$day" "$hour" "$minute" "$second")


      10 - LASTDEREG_DATE="1.3.6.1.4.1.3320.101.11.1.1.10"
      аналогично 9му оиду.

      11 - LASTDEREG_REASON="1.3.6.1.4.1.3320.101.11.1.1.11" 
      DEREG_STATUS=$($snmp3 $IP "$LASTDEREG_REASON.$IF_INDEX.$mac10" -Oqv 2>/dev/null)
          case "$DEREG_STATUS" in
              2) dereg_status_text="normal";;
              3) dereg_status_text="mpcp-down";;
              4) dereg_status_text="oam-down";;
              5) dereg_status_text="firmware-download";;
              6) dereg_status_text="illegal-mac";;
              7) dereg_status_text="llid-admin-down";;
              😎 dereg_status_text="wire-down";;
              9) dereg_status_text="power-off";;
              255) dereg_status_text="unknown";;
              0) dereg_status_text="Нет данных.";;
              *) dereg_status_text="not found";;
          esac

      есть прикол если онушка autoconfig статус 3 / authenticated статус 0
      там инвертируються 7 и 8  может и от моделей ону зависеть.... 
      7) dereg_status_text="llid-admin-down";;
      😎 dereg_status_text="wire-down";;
      это уже тестами )


      12  -  OID_ONU_ETH="1.3.6.1.4.1.3320.101.12.1.1.8" статус езернет ничего не обычного кроме того что может верно отдать данные с 2-3го раза )
      2 down 1 up 
      там же есть прикол с authenticated autoconfig инвертируется...
      local PORT_COUNT=$($snmp2 "$IP" "$OID_ONU_ETH.$INDEX" | wc -l)
      local ETH_STATUS=$($snmp2 "$IP" "$OID_ONU_ETH.$INDEX.$port" 2>/dev/null)
              [[ "$ETH_STATUS" =~ ^[0-9]+$ ]] || continue  # Проверяем, что ETH_STATUS - это число
              if [[ "$onuAunt_type" == "0" ]]; then
                  STATUS_COLOR=$( [[ "$ETH_STATUS" -eq 2 ]] && echo "UP" || echo "DOWN" )
              else
                  STATUS_COLOR=$( [[ "$ETH_STATUS" -eq 1 ]] && echo "UP" || echo "DOWN" )
              fi

      13 - OID_PORT_INDEX="1.3.6.1.4.1.3320.101.107.1.1" # oid возвращает все индексы ПОН портов, работает не везде.
      14 - OID_GEPORT_COUNT="1.3.6.1.4.1.3320.101.10.1.1.12"   гигабит езернет порты на онушках (кол-во)
      15 - OID_FEPORT_COUNT="1.3.6.1.4.1.3320.101.10.1.1.14"   ФастЕзернет 100мбит аналогично. 
      INTEGER 

      16 - OID_REBOOT_ONU="1.3.6.1.4.1.3320.101.10.1.1.29" # snmpset -v2c -c RW IP OID.onuIndex i 0                                  reboot REBOOT ONU epon snmp
      $snmp5 "$IP" "$OID_REBOOT_ONU.$INDEX" i 0 >/dev/null 2>&1

      17 - delete onu epon  удалить ону бдком снмп 
      OID_DEL_ONU="SNMPv2-SMI::enterprises.3320.101.11.1.1.2"
      $snmp5 "$IP" "$OID_DEL_ONU.$ifID.$mac10" i 0 > /dev/null 2>&1    oid.PORTINDEX.mac10 i 0 
      остальные есть выше там думаю всё понятно.

      SIGNAL LEVELS в зависимости от моделей плат и олтов расписаны 
      все везде одинаково 
      $snmp2 "$IP" "$OID_RX_OLT.$INDEX" 2>/dev/null | awk '{print $NF / 10}')   результат делим на 10.

      epon пакеты, ошибки по портам на онушке.
      broadcasts=$($snmp4 "$IP" "1.3.6.1.4.1.3320.101.12.2.1.16.$INDEX.$port" 2>/dev/null)
      multicasts=$($snmp4 "$IP" "1.3.6.1.4.1.3320.101.12.2.1.17.$INDEX.$port" 2>/dev/null)
      unicasts=$($snmp4 "$IP" "1.3.6.1.4.1.3320.101.12.2.1.18.$INDEX.$port" 2>/dev/null)
      pause=$($snmp4 "$IP" "1.3.6.1.4.1.3320.101.12.2.1.19.$INDEX.$port" 2>/dev/null)
      fcserrs=$($snmp4 "$IP" "1.3.6.1.4.1.3320.101.12.2.1.20.$INDEX.$port" 2>/dev/null )
      oversize=$($snmp4 "$IP" "1.3.6.1.4.1.3320.101.12.2.1.13.$INDEX.$port" 2>/dev/null)
      jabber=$($snmp4 "$IP" "1.3.6.1.4.1.3320.101.12.2.1.14.$INDEX.$port" 2>/dev/null)

      мне бы такое помогло.. а не искать на тонне форумов и сайтов и неделю тыкая snmpwalk и выясняя что и для чего. остального и в инете полно. 
    • Від Amigo
      Продам GEPON ОЛТи BDCOM
      1. BDCOM P3310B (Вживаний) - 6000 грн.
      2. BDCOM P3310C (Вживаний) - 7500 грн.
      3. BDCOM P3310C (Вживаний без вух) - 7000 грн.
      4. BDCOM P3608-2TE (Вживаний) - 20000 грн.
      5. BDCOM P3608-2TE  (Вживаний) - 19000 грн.

    • Від grapefruit
      Доброго вечора, спільното!
      Можливо хтось стикався з завданням,коли потрібно на OLT BDCOM GP3600 по oid визначити час розреєстрування ону. В неті нічого знайти не вдалося, через MIB браузер тоже ніц.
      Якщо підкажете буде дуже вдячний, або хоч підкажіть де шукати.
      Всім гарного вечора)
    • Від alexeya
      Продам OLT ZTE C320. OLT укомплектован блоком живлення PRAM, двома платами GTGH(K00), платою керування SMXA(A31).

      Кожна GTGH-плата, це 16 GPON портів, 16 GPON модулів C++.
      SMXA-плата, це SFP+ (10G) порт, 1 гігабітний комбо порт.

      В наявності 2 одиниці. Один новий, один був у використанні (стан близький до нового)

      Ціна нового - 120000 грн
      Ціна вживаного - 105000 грн

      BDCOM GP-3600-08B куплявся в ДЕПСі в вересні 23 року. В ньому використовувались тільки 3 порти (тобто є тільки 3 GPON SFP модулі). 48к разом з модулями

      ОЛТИ без модулів:
      3310B-2AC - 1штука - 8000
      3310B - 2 штуки - 7500
      3310B + Proline UPS - 1 штука - 8500
      3310D + Proline UPS - 1 штука - 12500
      BDCOM P3600-04 + Proline UPS - 1 штука - 16500
      3616-2TE - 3 штуки - 53к

      Додам вживані EPON С++ модулі по 400 грн за штуку. Або нові по 750 грн за штуку
    • Від Prodazha
      Терміново продам  !!! Абонентський термінал FoxGate ONU 1001MZ
      Нові .
      кількість 450 шт
      ціна 299 грн за штуку
×
×
  • Створити нове...