faq обучение настройка
Текущее время: Чт июл 31, 2025 12:40

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 36 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Сб июн 30, 2007 23:19 
Не в сети
Сотрудник D-LINK
Сотрудник D-LINK

Зарегистрирован: Пт май 13, 2005 15:49
Сообщений: 20616
Откуда: D-Link, Moscow
А кто Вам сказал что свитч переводит команды SNMP в команды telnet?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб июн 30, 2007 23:55 
Не в сети

Зарегистрирован: Вс ноя 13, 2005 01:36
Сообщений: 195
Откуда: VTC SPbU
"а в момент устанокии и старта биллинга, свичам пришлось обрабатывать по 500 записей сразу ( несколько минут и всё ок ) , про SNMP писали что уходит до 20-30 минут на такое кол-во."

О каких записях речь?

Предположим, что речь идет о 500 записях для IpMacBindingPort в ACL-mode. Проводим тест! Берем DES-3550 и прописываем по 10 записей на порты с 1 по 48 по SNMP!

Тест:
- считывается таблица со свитча
- сравнивается с новой таблицей (так работает логика нашей системы)
- отключается IpMacBindingPort для портов, на которых будут изменения (советует D-Link)
- удаляются старые записи
- загружается новая таблицы (480 записей)
- включается IpMacBindingPort для портов, для которых были произведены изменения в таблицы
- сохраняется конфигурации

Длительность теста:
1 минута 4 секунды (прогон 1)
0 минут 56 секунд (прогон 2)

Хотя может я выбрал плохой тест, т.к. записей добавлялось действительно 480, но практически это добавление 10 одинаковых записей на каждый порт, которые свитч автоматически преобразовал в 10 записей, действующих на все порты.

Следует отметить, что больше всего занимает времени сохранение конфига, а также включение режима IpMacBindingPort для портов.

Надо будет попросить D-Link еще раз уточнить нужно ли это делать при обновлении записей, относящихся к порту, в обязательном порядке...


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн июл 02, 2007 07:51 
Не в сети

Зарегистрирован: Пн янв 08, 2007 15:38
Сообщений: 215
Откуда: Norilsk
snark писал(а):
oh shit! про запросы логина и пароля я совсем забыл :( но Вы уже наверное поняли что я своличь... ага... порядочная... я ж Вам предложу подумать над чем нить в духе
Код:
^(?:username:|password:|Fail!|^D[EG]S-[0-9]{4}:?[0-9]*#$)$

иначе ж буду мучиться :)

подумал немного и опять у вас пару недочетов , но вот что вышло:
Немного подправил функцию
Код:
    private  function Login()
    {
        $this->SockWrite("{$this->login}\n");
        while($read = @socket_read($this->sock,1024,PHP_BINARY_READ))
        {
            $readarr = explode("\r",$read);
            foreach($readarr as $nread)
            {   
                $parent ="/^(username|password|fail!|^D[EG]S-[0-9SR]{4,6}):?[0-9]*#?/is";
                if(preg_match_all($parent,$nread, $matches))
                {
                switch(strtolower($matches[1][0]))
                    {
                        case 'username':
                            $this->SockWrite("{$this->login}\n");
                            print "----LOGIN:--------\n";
                            break;
                        case 'password':
                            $this->SockWrite("{$this->pass}\n");
                            print "----PASS:----------\n";
                            break;
                        case 'fail!':
                            print "----Fail Login:----\n";
                            $if++;
                            if($if==3){return false;}
                            break;
                        case 'des-3526':
                        case 'des-3550':
                        case 'dgs-3324sr':   
                            print "----Login OK:------\n";   
                            return true ;
                            break;
                        default:
                            break;
                    }
                }
            }
        }
    }


Demin Ivan писал(а):
А кто Вам сказал что свитч переводит команды SNMP в команды telnet?

Я не совсем именно это хотел сказать , я писал что здесь на форуме об этом уже както обсуждалось , я это также взял както на заметку.
Пусть народ повычисляет сам если создавть одни и теже действие , и высчитать скорость выполнения ( ожидание на авторизацию не учитывать =)

в основном на свиче выполняются только создание ACL.
Код:
config access_profile profile_id 100 add access_id 1 ethernet source_mac 00-E0-91-0B-2B-D3 port 25 permit
config access_profile profile_id 100 add access_id 2 ethernet source_mac 00-05-5D-1A-7C-F8 port 25 permit
config access_profile profile_id 100 add access_id 3 ethernet source_mac 00-05-5D-E9-F2-E0 port 25 permit
.........................................................................................................
config access_profile profile_id 100 add access_id 2267 ethernet source_mac 00-15-F2-40-1B-1B port 17 permit
config access_profile profile_id 100 add access_id 2270 ethernet source_mac 00-19-21-37-8A-86 port 25 permit
config access_profile profile_id 100 add access_id 2275 ethernet source_mac 00-0E-A6-83-CF-24 port 2 permit

т.е встроеных IpMacBindingPort не использую.
самой долгой коммандой является save =)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн июл 02, 2007 09:52 
Не в сети

Зарегистрирован: Пн сен 27, 2004 18:18
Сообщений: 1642
Откуда: Vault 13
Vano™ писал(а):
подумал немного и опять у вас пару недочетов
ну дык писалось то с кандачка, в процессе написания поста, да и не говорил я что у меня все идеально должно быть ;) а вот Вам отдельный респект за Вашу работу


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс июл 08, 2007 18:50 
Не в сети

Зарегистрирован: Сб ноя 04, 2006 18:49
Сообщений: 239
Vano™ писал(а):
PHP Демон. BaseDemon.php
Код:
 
<?php
.............................               {
                           $this->save_lasttime['sw.core.lan'] = time();
                           echo "start Insert ".$this->save_lasttime['sw.core.lan']." \n";

...........................
                  



Что такое 'sw.core.lan' ?

И не могли бы Вы написать более подробный "readme". Для меня не совсем понятно в какой строке скрипт "вычисляет" должника и отключает его.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт июл 10, 2007 02:04 
Не в сети

Зарегистрирован: Пн янв 08, 2007 15:38
Сообщений: 215
Откуда: Norilsk
sw.core.lan - это DGS 3324SR - который стоит в центре звезды
Тут есть соседняя ветка об сильной загрузке CPU .
данный кусок кода задает каждые 2 часа команду для чистки ARP
Код:
$lt = $this->save_lasttime['sw.core.lan']+$this->save_timeout;
                     $t = time();
                     if($lt < $t)
                     {
                           $this->save_lasttime['sw.core.lan'] = time();
                           echo "start Insert ".$this->save_lasttime['sw.core.lan']." \n";
                           $DB->query("INSERT INTO nbotu_comander (comanda, action, router) values ('clear arptable \n','clear arptable','sw.core.lan')");
                     }


скрипт который вычисляет должника находится на стороне биллинга , это совсем другая тема , биллинг создает простую последовательность команд как для комутаторов с созданием ACL для пропуска так и их удалением.
В скрипте нет нечего особенного проверяется время оплаты с текущим , и если оно меньше то ACL удаляется , при пополнении счета ACL добавляется и пользователь дальше сидит в сети.

Сразу отмечу что сеть не провайдерская , а создавалась изночально как домашняя сеть к которой также имеются выходы в другие подобные сети каждая сеть насчитывает 1500 абонентов ( т.к мы отдаленый кусочек и интернет тут только через спутник , что дорого и не для всех доступно , то сильно развита инфраструктура именно внутри сети ).


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс май 17, 2009 23:39 
Не в сети

Зарегистрирован: Пн янв 08, 2007 15:38
Сообщений: 215
Откуда: Norilsk
Заметил всплыла одна из старых тем, вспомнил и про свою...
почти 2 года прошло , а с момента работы данной конструкции уже и все 3.
Мне интересно стало , стоило ли вкладывать свои труды и пробывал ли кто-либо еще использовать моё творение ?
некоторые вещи в текущей реализации изменены , например написан SysLog , соответсвенно и текущие скрипты уже логи отправляют туда , вместе с тем что и посылают туда всё остальное оборудование.
Еще несколько раз смотрел в сторону SNMP , но простые комманды наглядно понятнее и доступнее.
Ну да и ладно пусть новые люди тоже почитают может и возмут на заметку для развития ...

_________________
Люблю писать с ошибками.....
D-Link User: DGS-3627G, DGS-3324SR, DES-3526, DES-1024D, DES-1016D, DWL-2100AP, DEM-310GT,DEM-330, DCS-950.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн май 18, 2009 09:23 
Не в сети

Зарегистрирован: Пн сен 27, 2004 18:18
Сообщений: 1642
Откуда: Vault 13
Vano™ писал(а):
стоило ли вкладывать свои труды

стоило ;)

_________________
с уважением, БП


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн май 18, 2009 15:00 
Не в сети

Зарегистрирован: Вс дек 21, 2008 18:53
Сообщений: 1308
Vano™ писал(а):
например написан SysLog , соответсвенно и текущие скрипты уже логи отправляют туда , вместе с тем что и посылают туда всё остальное оборудование.

Вот с этого места поподробнее 8) Имеется ввиду сислог-сервер?

_________________
D-Link Switches: Tips & Tricks


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн май 18, 2009 21:06 
Не в сети

Зарегистрирован: Пн янв 08, 2007 15:38
Сообщений: 215
Откуда: Norilsk
xcme писал(а):
Вот с этого места поподробнее 8) Имеется ввиду сислог-сервер?

ну да , т.к Linux'a под рукой нет и не всегда удобно , то был написан на php с исполльзованием сокетов . Все данные пишет в Mysql.
при наличии фантазии и рук можно многое зделать ...

_________________
Люблю писать с ошибками.....
D-Link User: DGS-3627G, DGS-3324SR, DES-3526, DES-1024D, DES-1016D, DWL-2100AP, DEM-310GT,DEM-330, DCS-950.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн май 18, 2009 22:52 
Не в сети

Зарегистрирован: Сб июн 28, 2008 12:51
Сообщений: 66
Откуда: Саратов
С ПХП сокетами знаком плохо, позаимствовал в свое время отсюда основные моменты приконекчивания к свичу и посыл команд, что очень помогло. А потом код раздулся, появилась для него веб морда биллинга, красотища. Так что полный респект.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт май 19, 2009 00:12 
Не в сети

Зарегистрирован: Пн янв 08, 2007 15:38
Сообщений: 215
Откуда: Norilsk
Setur писал(а):
С ПХП сокетами знаком плохо, позаимствовал в свое время отсюда основные моменты приконекчивания к свичу и посыл команд, что очень помогло. А потом код раздулся, появилась для него веб морда биллинга, красотища. Так что полный респект.

Радует что труды непропали даром, с сокетами тоже нет идеала , но кое какой функционал имеется ( можно сказать по созданому когда-то шаблону).
Основной упор и делался как приконектится к свичу , залогинится на нём правельно и отработать комманды.
Основной плюс проделанной работы это , то что можно выполнить любые комманды которые доступны через telnet и нет необходимости искать Mib's для какого-то значения и преобразовывать типы.

p.s Тут когдато был вопрос может запихнуть в faq ? тогда в каком виде это оформить ? ( т.к на форуме тема теряется ).

_________________
Люблю писать с ошибками.....
D-Link User: DGS-3627G, DGS-3324SR, DES-3526, DES-1024D, DES-1016D, DWL-2100AP, DEM-310GT,DEM-330, DCS-950.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт май 19, 2009 01:03 
Не в сети
Сотрудник D-LINK
Сотрудник D-LINK

Зарегистрирован: Пт май 13, 2005 15:49
Сообщений: 20616
Откуда: D-Link, Moscow
Присылайте описание оформим в FAQ. Только как можно подробнее. Заранее спасибо!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср май 20, 2009 13:54 
Не в сети

Зарегистрирован: Пт июл 18, 2008 14:04
Сообщений: 8
Vano™ писал(а):
Setur писал(а):
С ПХП сокетами знаком плохо, позаимствовал в свое время отсюда основные моменты приконекчивания к свичу и посыл команд, что очень помогло. А потом код раздулся, появилась для него веб морда биллинга, красотища. Так что полный респект.

Радует что труды непропали даром, с сокетами тоже нет идеала , но кое какой функционал имеется ( можно сказать по созданому когда-то шаблону).
Основной упор и делался как приконектится к свичу , залогинится на нём правельно и отработать комманды.
Основной плюс проделанной работы это , то что можно выполнить любые комманды которые доступны через telnet и нет необходимости искать Mib's для какого-то значения и преобразовывать типы.


p.s Тут когдато был вопрос может запихнуть в faq ? тогда в каком виде это оформить ? ( т.к на форуме тема теряется ).



А можно попросить собрать получившееся в кучку, и выложить куда-либо, можно без readme в принципе разберемся и так, и спасибо за разработку, актуальна и полезна.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср май 20, 2009 15:54 
Не в сети

Зарегистрирован: Пн май 18, 2009 06:17
Сообщений: 11
Откуда: LiaNet.ru
Добавлю свои пару копеек:
Структура таблицы оборудования:
Код:
mysql> show fields from _data;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(5)       | NO   | PRI | NULL    | auto_increment |
| snumber  | varchar(16)  | YES  |     | NULL    |                |
| model    | varchar(32)  | YES  |     | NULL    |                |
| firmware | varchar(32)  | YES  |     | NULL    |                |
| config   | text         | YES  |     | NULL    |                |
| box_id   | varchar(10)  | YES  |     | NULL    |                |
| cmt      | varchar(255) | YES  |     | NULL    |                |
| ip       | varchar(15)  | YES  |     | NULL    |                |
| login    | varchar(15)  | YES  |     | NULL    |                |
| password | varchar(15)  | YES  |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+
10 rows in set (0.02 sec)

Таблица пулера:
Код:
mysql> show fields from pooler;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| sid   | smallint(6) | NO   | MUL | NULL    |       |
| port  | tinyint(4)  | NO   | MUL | NULL    |       |
| mac   | char(12)    | NO   | MUL | NULL    |       |
| ip    | varchar(15) | NO   | MUL | NULL    |       |
| ptime | datetime    | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

Пулер (запускается раз в 30 минут):
Код:
#!/usr/local/bin/php                                                                                                                                           
<?php                                                                                                                                                         
function PadMAC($mac) {                                                                                                                                       
    $mac_arr = explode(':',$mac);                                                                                                                             
    foreach($mac_arr as $atom) {                                                                                                                               
        $atom = trim($atom);                                                                                                                                   
        $newarr[] = sprintf("%02s",$atom);                                                                                                                     
    }                                                                                                                                                         
    $newmac = implode(':',$newarr);                                                                                                                           
    return $newmac;                                                                                                                                           
}                                                                                                                                                             
                                                                                                                                                               
$script_begin = date("H:i:s");                                                                                                                                 
$db_host = "localhost";                                                                                                                                       
$db_user = "root";                                                                                                                                             
$db_pass = "";                                                                                                                                                 
$db_name = "mon";                                                                                                                                             
$pub = "public";                                                                                                                                         
$ip_mac_string = ".1.3.6.1.2.1.4.22.1.2";                                                                                                                     
$id_port= ".1.3.6.1.2.1.17.4.3.1.2";                                                                                                                           
$id_mac = ".1.3.6.1.2.1.17.4.3.1.1";                                                                                                                           
$conn = mysql_connect($db_host, $db_user, $db_pass) or die(mysql_error());                                                                                     
mysql_select_db($db_name);                                                                                                                                     
$switch = mysql_query("select ip, id from _data where ip!=0 and model='DES-3526'");                                                                           
while($res=mysql_fetch_array($switch)) {                                                                                                                       
        $switch_ip = $res[0];                                                                                                                                 
        $switch_id = (int)$res[1];                                                                                                                             
        print "Pooling $switch_id ( $switch_ip )\n";
$a1 = split("\n",eregi_replace("INTEGER: ","",eregi_replace("SNMPv2-SMI::mib-2.17.4.3.1.2.","",shell_exec("/usr/local/bin/snmpwalk -c $pub -v 2c $switch_ip $id_port"))));                                                                                                                                           
        $a2 = split("\n",eregi_replace("Hex-STRING: ","",eregi_replace("SNMPv2-SMI::mib-2.17.4.3.1.1.","",shell_exec("/usr/local/bin/snmpwalk -c $pub -v 2c $switch_ip $id_mac"))));                                                                                                                                         
        $a3 = split("\n",eregi_replace("STRING: ","",eregi_replace("IP-MIB::ipNetToMediaPhysAddress.5120.","",shell_exec("/usr/local/bin/snmpwalk -c $pub -v 2c $switch_ip $ip_mac_string"))));
$compare1 = array();                                                                                                                                   
        foreach($a3 as $val) {                                                                                                                                 
                $ipmac = split(" = ", $val);                                                                                                                   
                $ip = $ipmac[0]; $mac = eregi_replace(":","",strtoupper(PadMAC($ipmac[1])));                                                                   
                if($ip && $mac) {                                                                                                                             
                        // print "$ip = $mac\n";                                                                                                               
                        $compare[$mac] = $ip;                                                                                                                 
                }                                                                                                                                             
        }                                                                                                                                                     
        foreach($a1 as $key=>$val) {                                                                                                                           
                $string = split(" = ","$val = ".$a2[$key]);                                                                                                   
                if($string[1] && $string[3]) {                                                                                                                 
                        $port = (int)$string[1];                                                                                                               
                        $mac = eregi_replace(" ","",$string[3]);                                                                                               
                        $ip = $compare[$mac];                                                                                                                 
                        if($port && $mac && $ip) {                                                                                                             
                        //      print "$switch_id = $port = $mac = $ip\n";                                                                                     
                                mysql_query("insert into pooler(sid, port, mac, ip, ptime) values($switch_id, $port, '".$mac."', '".$ip."', now())");         
                        }                                                                                                                                     
                }                                                                                                                                             
        }                                                                                                                                                     
}                                                                                                                                                             
mysql_close($conn);                                                                                                                                           
$script_end = date("H:i:s");                                                                                                                                   
print "Begin: $script_begin, end $script_end.\n\n";                                                                                                           
?>


В итоге получаем внятную статистику Switch-Port-IP-MAC-время опроса.
На 650 свичей скрипт отрабатывает 14-16 минут.

Код:
mysql> select * from pooler limit 0,10;
+-----+------+--------------+-----------------+---------------------+
| sid | port | mac          | ip              | ptime               |
+-----+------+--------------+-----------------+---------------------+
| 592 |   26 | 001E58A7FA40 | 10.170.10.162   | 2009-05-09 17:34:33 |
| 592 |   26 | 001D60D45855 | 10.170.10.129   | 2009-05-09 17:34:33 |
| 592 |   26 | 001CC0299F66 | 10.170.10.156   | 2009-05-09 17:34:33 |
| 592 |   26 | 001B3843380E | 10.170.10.106   | 2009-05-09 17:34:33 |
| 592 |   26 | 0019DBAA14B1 | 10.170.10.130   | 2009-05-09 17:34:33 |
| 592 |   26 | 0019D1613739 | 192.168.111.211 | 2009-05-09 17:34:33 |
| 592 |   26 | 00179ABF9CA2 | 10.170.10.71    | 2009-05-09 17:34:33 |
| 592 |   26 | 001731AA1A0D | 192.168.111.204 | 2009-05-09 17:34:33 |
| 592 |   26 | 00173167123B | 10.170.10.31    | 2009-05-09 17:34:33 |
| 592 |   26 | 0017314BBF4A | 192.168.111.206 | 2009-05-09 17:34:33 |
+-----+------+--------------+-----------------+---------------------+
10 rows in set (0.09 sec)

_________________
Не важно откуда растут золотые руки ...
Жена: http://6e6e6e.com Сын http://sashablog.ru


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 36 ]  На страницу Пред.  1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB