Сохранение конфигурации свичей Dlink на tftp сервер
Задача: в Lanbilling 2.xx забиты узловые свичи. Необходимо время от времени «снимать» с них текущую конфигурацию.
Решение: поднимаем tftp сервер, и при помощи snmp , даем команду свичам сбросить свою конфигурацию на него. Скрипт делаем на PHP.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
#!/usr/local/bin/php <?php /* * (с) 2011-2015 Грибов Павел * http://грибовы.рф * * Если исходный код найден в сети - значит лицензия GPL v.3 * * В противном случае - код собственность ГК Яртелесервис, Мультистрим, Телесервис, Телесервис плюс * */ $masterserver="egwergwer"; $mastername="lbuewrgwergweser"; $masterpass="ergwer"; $masterbase="werfgvwergvw"; $tftpserver="1q2fqwf0"; $debug=true; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Различного вида функции и классы для удобства работы ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// class Tsql { var $idsqlconnection; function connect($host,$name,$pass,$base,$log){ global $debug; if ($debug==true){echo "$log\n";}; $this->idsqlconnection=mysql_connect($host,$name,$pass,$base); if (!$this->idsqlconnection){ echo 'Ошибка соединения: ' . mysql_error().'\n'; } else { mysql_select_db($base, $this->idsqlconnection); }; } function ExecuteSQL($sql,$log){ global $debug,$dieerror; if ($debug==true){echo "$log\n";}; $result = mysql_query($sql,$this->idsqlconnection); if (!$result){ if ($dieerror==true) die('Ошибка выполнения: ' . mysql_error()); else {echo 'Ошибка выполнения: ' . mysql_error()."\n";}; } return $result; } }; function GetRandomId($n){ // результат - случайная строка из цифр длинной n $id=""; for ($i = 1; $i <= $n; $i++){ $id=$id.chr(rand(48,56)); }; return $id; }; function PutLog($ss){ global $debug; if ($debug==true) echo "$ss\n"; }; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// $mlink=new Tsql(); $mlink->connect($masterserver, $mastername, $masterpass, $masterbase,'-пытаюсь соедениться с базой настроек'); //листаю все устройства $sql="select devices.device_name,device_groups_members.device_id,device_groups_members.group_id,devices_options.value from devices_options inner join device_groups_members on device_groups_members.device_id=devices_options.device_id inner join devices on devices.device_id=device_groups_members.device_id where devices_options.name='IP' and device_groups_members.group_id=11"; $result = $mlink->ExecuteSQL($sql,"--листаю все устройства"); while ($myrow = mysql_fetch_array($result)){ $device_name=$myrow["device_name"]; $device_id=$myrow["device_id"]; $group_id=$myrow["group_id"]; $ip=$myrow["value"]; // ну узнаем еще до кучи и комьюнити $com=""; $sql="select devices_options.value from devices_options inner join device_groups_members on device_groups_members.device_id=devices_options.device_id inner join devices on devices.device_id=device_groups_members.device_id where devices_options.name='Community' and device_groups_members.device_id=$device_id"; $result2 = $mlink->ExecuteSQL($sql,"--узнаю комьюнити");while ($myrow2 = mysql_fetch_array($result2)){$com=$myrow2["value"];}; if ($com!=""){ 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(3); //переименуем полученный файл $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"); }; } else { PutLog("-- у устойства $device_name нет комьюнити! Пропускаю.."); }; }; |