Архив метки: dlink

Сохранение конфигурации Dlink в файл через SNMP

Иногда требуется на всякий случай иметь бекапы конфигурации работающих в данный момент свичей. Один из вариантов — поднимаем сервер TFTP и просим свич сохранить свою конфигурацию на него.

Пример скрипта:

      PutLog("-- Стартуем сохранение конфиги у $device_name");    
      $cm="snmpset -v2c -c X-Files $ip 1.3.6.1.4.1.171.12.1.2.18.1.1.3.3 a $tftpserver";
      PutLog("--- устанавливаем tftp сервер: $cm");    
      $rez=`$cm`;      
      if (strripos($rez,"IpAddress")>0){
        $cm="snmpset -v2c -c X-Files $ip 1.3.6.1.4.1.171.12.1.2.18.1.1.5.3 s $device_name.cfg";
        PutLog("---- устанавливаем имя файла: $cm");              
        $rez=`$cm`;      
        if (strripos($rez,"STRING")>0){
            $cm="snmpset -v2c -c X-Files $ip 1.3.6.1.4.1.171.12.1.2.18.1.1.8.3 i 2";
            PutLog("----- устанавливаем конфиг для сохранения: $cm");              
            $rez=`$cm`;                  
            if (strripos($rez,"INTEGER")>0){
                $cm="snmpset -v2c -c X-Files $ip 1.3.6.1.4.1.171.12.1.2.18.1.1.12.3 i 3";
                PutLog("----- сохраняем конфиг : $cm");              
                $rez=`$cm`;                  
              if (strripos($rez,"INTEGER")>0){                
                  sleep(10);
                  //переименуем полученный файл
                  $newname=$device_name.Date("-Y-m-d-H-i");
                  $rez=`mv /var/tftp/$device_name.cfg /var/tftp/$newname.cfg`;
                   echo "$rez\n";
                  //добавим в архив
                  $rez=`zip /var/tftp/$device_name.zip -m /var/tftp/$newname.cfg`;
                  echo "$rez\n";
              } else {
               PutLog("-- ОШИБКА сохранения конфига");    
            };
            } else {
            PutLog("-- ОШИБКА установки конфига");    
            };            
        } else {
        PutLog("-- ОШИБКА установки имени файла");    
      };
      } else {
        PutLog("-- ОШИБКА установки tftp сервера у $device_name");    
      };

Сохранение конфигурации свичей Dlink на tftp сервер

Задача: в Lanbilling 2.xx забиты узловые свичи. Необходимо время от времени «снимать» с них текущую конфигурацию.

Решение: поднимаем tftp сервер, и при помощи snmp , даем команду свичам сбросить свою конфигурацию на него. Скрипт делаем на PHP.

Читать далее Сохранение конфигурации свичей Dlink на tftp сервер

Свичи Dlink. Получаем список портов на определенном VLAN.

Сделаем это на PHP:

$ip="222.226.134.21";
$vlan=10;

//получаем порты в 10 VLAN
echo "--опрашиваю $ip\n";
$rez=`snmpget -v2c -c X-Files $ip 1.3.6.1.2.1.17.7.1.4.3.1.4.$vlan`;
$reza=  explode("Hex-STRING: ", $rez);
$tmp=trim($reza[1]);
$reza=  explode(" ", $tmp);
$hx=hexdec($reza[0]."".$reza[1]."".$reza[2]."".$reza[3]);
$bin=decbin($hx);
echo "--бинарная строка: $bin\n";
if (strlen($bin)>1){
  for ($i=0;$i<strlen($bin);$i++){
      if ($bin[$i]==1) {
          $port=$i+1;
          echo "--на $port порту $vlan VLAN\n";          
      };
  };
} else {
  echo "$ip отдал не корректные данные! ($rez)\n";  
};

 

Определение состояния порта на свичах Dlink на PHP

<?php

// Данный код создан и распространяется по лицензии GPL v3
// Изначальный автор данного кода - Грибов Павел
// http://грибовы.рф

function GetEnt($res){
    $zz=explode("INTEGER:", $res);
    if (is_array($zz)==true) {return trim($zz[1]);} else
    {return "";};
};

//запускаем тест проверки кабеля

 $res=shell_exec("snmpset -v2c -c X-Files $devip 1.3.6.1.4.1.171.12.58.1.1.1.12.$port i 1");
 $res=GetEnt($res);
 if ($res=="1"){
 //проверяем что он завершился:
 $res=shell_exec("snmpget -v2c -c X-Files $devip 1.3.6.1.4.1.171.12.58.1.1.1.12.$port");
 $res=GetEnt($res);
 if ($res!="3"){
     //еще разок тестанем!
     $res=shell_exec("snmpget -v2c -c X-Files $devip 1.3.6.1.4.1.171.12.58.1.1.1.12.$port");
     $res=GetEnt($res);
 };
 if ($res=="3"){
   //есть ли линк?
   $res=shell_exec("snmpget -v2c -c X-Files $devip 1.3.6.1.4.1.171.12.58.1.1.1.3.$port");
   $res=GetEnt($res);
   if ($res=="1"){echo "-линк есть</br>";} else {echo "-линка нет</br>";};
   //состояние 1 пары
   $res=shell_exec("snmpget -v2c -c X-Files $devip 1.3.6.1.4.1.171.12.58.1.1.1.4.$port");
   $res=GetEnt($res);
   if ($res=="0"){echo "-1 пара ОК</br>";} else {echo "-1 пара BAD</br>";};
   //состояние 2 пары
   $res=shell_exec("snmpget -v2c -c X-Files $devip 1.3.6.1.4.1.171.12.58.1.1.1.5.$port");
   $res=GetEnt($res);
   if ($res=="0"){echo "-2 пара ОК</br>";} else {echo "-2 пара BAD</br>";};
   //состояние 3 пары
   $res=shell_exec("snmpget -v2c -c X-Files $devip 1.3.6.1.4.1.171.12.58.1.1.1.6.$port");
   $res=GetEnt($res);
   if ($res=="0"){echo "-3 пара ОК</br>";} else {echo "-3 пара BAD</br>";};
   //состояние 4 пары
   $res=shell_exec("snmpget -v2c -c X-Files $devip 1.3.6.1.4.1.171.12.58.1.1.1.7.$port");
   $res=GetEnt($res);
   if ($res=="0"){echo "-4 пара ОК</br>";} else {echo "-4 пара BAD</br>";};
   
   //определяем длинну пар
   $res=shell_exec("snmpget -v2c -c X-Files $devip 1.3.6.1.4.1.171.12.58.1.1.1.8.$port");
   $res=GetEnt($res);
   echo "-длина 1 пары $res</br>";
   $res=shell_exec("snmpget -v2c -c X-Files $devip 1.3.6.1.4.1.171.12.58.1.1.1.9.$port");
   $res=GetEnt($res);
   echo "-длина 2 пары $res</br>";
   $res=shell_exec("snmpget -v2c -c X-Files $devip 1.3.6.1.4.1.171.12.58.1.1.1.10.$port");
   $res=GetEnt($res);
   echo "-длина 3 пары $res</br>";
   $res=shell_exec("snmpget -v2c -c X-Files $devip 1.3.6.1.4.1.171.12.58.1.1.1.11.$port");
   $res=GetEnt($res);                              
   echo "-длина 4 пары $res</br>";
   
   //Определяем состояние кабеля
   $res=shell_exec("snmpset -v2c -c X-Files $devip 1.3.6.1.4.1.171.12.58.1.1.1.12.$port i 1");
   $res=shell_exec("snmpget -v2c -c X-Files $devip 1.3.6.1.4.1.171.12.58.1.1.1.4.$port");
   $res=GetEnt($res);
   if ($res=="8") {echo "-Кабель не подключен</br>";};
   if ($res=="1") {echo "-Кабель воткнут с одной стороны (второй конец висит в воздухе)</br>";};
     
   
 } else {
 ?>
    <div class="alert alert-error">
        Не удалось завершить опрос пары!
    </div>
 <?php
};
 } else {
 ?>
    <div class="alert alert-error">
        Не удалось выполнить SNMP запрос!
    </div>
 <?php
};

Сделано по мотивам: http://wiki.sirmax.noname.com.ua/index.php/Dlink_Cable_Tester