Страницы: 1 2 След.
RSS
Скрипт отключение портов
 
function Main()
{
  //Задаем имя файла вывода данных
  Host.OutputFileName = Host.OutputFileName + ' '+ 'SNMP2';
  Host.Echo('OldState - ' + Sender.OldState + StateAsString(Sender.OldState));
  Host.Echo('NewState - ' + Sender.NewState + StateAsString(Sender.NewState));

  var SNMP = Sender.CreateSNMPAccessServerObject(true);
  if (SNMP == null) // Нет настроек
  {
    Host.Echo('Не заданы настройки SNMP для ' + Sender.DisplayName);
    return;
  }

  var Port = Sender.AccessServerPort; //Номер порта устройства доступа

  SNMP.SheduledTaskOnTimeout(15, 'TestSwitch_1');
  SNMP.ExceptOnTimeout = false;

  var PortState = SNMP.ifAdminStatus(Port);
  Host.Echo('Состояние порта ' + Port +':');
  Host.Echo('    ifAdminStatus - ' + PortState);
  Host.Echo('    ifOperStatus - ' + SNMP.ifOperStatus(Port));

  var NewPortState = 1; // work
  if (Sender.NewState < 0 && Sender.NewState != -brNotAuth)
    NewPortState = 2; // block

  if (NewPortState != PortState)
  {
    SNMP.SetifAdminStatus(Port, NewPortState);
    Host.Echo('Изменено состояние порта на ' + NewPortState);
  }
}

можно ли используя этот скрипт следующее:
Абонент переходит в состояние заблокирован (отрицательный баланс), скрипт отключает порт и ставит пользователя в паузу.
Потом пополняем счет пользователя, скрипт включает порт и снимает паузу
 
Можно, но этот скрипт надо доработать. Можно из 2-х сделать - второй тут.

 

выложите пожалуста такой скрипт здесь... для нубов типа меня ....



а то стандартный только порт отключает и включает....



хотя согласно новым требованиям запрещено отключать клиента...



хотелось бы такой скрипт который разрешал бы для порта пользователя только один ip адрес = адрес шлюза с ТИ и что бы пользователь  ставился в паузу но что бы у него была возможность лазить по своей статистике и пополнять свой баланс с помощью карт и тд....
а так же что бы пользователь имел возможность сам себя поставить в паузу и снять ее....



но это мечты...

 



Цитата
хотелось бы такой скрипт
вы же понимаете, что проблема не в скриптах, а в функционале свичей, которые у вас стоят на доступе? ну и в некоторых случаях, в дизайне сети.
 

уважаемый.... если я пишу. значит знаю  что у меня на доступе стоят 3526 и 3550... и они прекрасно это все делают... но в скриптах я не силен и Morfа нет.... деньги есть... скрипт написать некому...
А в версии 2.0 такая же хрень что при отрицательном балансе или при постановке его в паузу клиент не может себе пополнить счет с помощью карт и скриптов?



ТЗ:
Необходимо что бы при достижении пользователями баланса < 0, порт клиента с помощью правил ACL начинал пропускать пакеты только на ip с ТИ, клиент ствится в паузу.



При блансе > 0 все возвращается обратно.
Абонка снимается посуточно с помощью стандарных средств ТИ.



 

 
На мой взгляд с АЦЛами это морока.
Просто пихать порт в другой ВЛАН и вести этот влан куда нужно =)
Кстати, на этапе реализации системы включения / отключения портов, разработчиков вроде как просили внести возможность изменения VID'а порта.
 
почему морока? думаю намного проще.. чем вланы прокидывать, при условии что все коммутаторы одинаковые на доступе стоят
 

Можно применить схемку:



vlan1 штатный с рабочим инетом где 10.0.0.1 интерфейс ТИ



при отрицательном балансе юзера перекидывать в vlan2 на другом конце которого висит интерфейс 10.0.0.1 *nix машины с настроенным Apache+firewall с правилом перенаправления запросов 80-ого порта на Ваш апач где крутится страничка с Боольшущей надписью "Заплатите налоги и живите спокойно".  Туда можно впиндюрить и возможность ввести карту оплаты и остальное по желанию.

 
Да, примерно это я и имел ввиду.
С АЦЛами сложнее в том что, управлене осуществляется через SNMP. не все свитчи умеют по SNMP вносить правила ACL. К тому же чтобы записать одно лишь правило, необходимо послать не одну команду, а добрый десяток. При чём после всего этого нужно ещё и проконтролировать то, достигли ли они цели. А это довольно трудоёмко и усложняет код и логику.

В свою очередь сейчас довольно много свитчей умеет gvrp, что гораздо упрощает конфигурирование вланов (имею ввиду проброс новосозданных) на свитчах.

Да и логичнее это, оаскидать по разным broadcast доменам пользователей, чтобы недовольный отключенный пользователь даже не стремился нагадить каким либо образом и долбал АЦЛы свитча. И ещё не известно на ДЛинка АЦЛы работают на ASIC'е или это процессорная функция ? Если процессорная то можно и угробить свитч, нагрузив его безумным количеством трафика который попадает в АЦЛ фильтр.

Конечно всё это может быть и схоластика, и на практике такой случай бывает один на миллион, но уж лучше чтобы его вообще не было =)

 
Не страшен чёрт как его малюют.



Пример создания ACL IP правила.



Работу кода не проверял, но по идеи должно работать.



Материал:

Настройки функции Access Control List по SNMP для серий DES-35XX.doc (где-то на сайте д-линка лежит или юзайте форум) и Traffic Inspector SDK.



Код
function Main()</br><br />{</br><br />  var SNMP = Sender.CreateSNMPAccessServerObject(true);</br><br />  if (SNMP == null) // Нет настроек</br><br />  {</br><br />&nbsp;&nbsp;&nbsp;&nbsp;Host.Echo('Не заданы настройки SNMP для ' + Sender.DisplayName);</br><br />&nbsp;&nbsp;&nbsp;&nbsp;return;</br><br />  }</br><br />  </br><br />  SNMP.Community = 'sdasd'; // Community (пароль) для доступа к устройству</br><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</br><br /></br><br />  var Port = Sender.AccessServerPort; //Номер порта устройства доступа</br><br /></br><br />  //  ========== Создание IP правила для профиля с ID равным 10 ===========</br><br />  </br><br />  SNMP.ClearRequestData; // очищаем список.</br><br />  </br><br />  //Задать IP адрес источника</br><br />  SNMP.AddStrValue('1.3.6.1.4.1.171.12.9.2.2.1.4.10.20', '192.168.0.20');</br><br />  // 192.168.0.20 Source IP (IP адрес источника)</br><br />  // [10.20]: 10 - ID профиля; 20 - ID правила</br><br />  SNMP.AddStrValue('1.3.6.1.4.1.171.12.9.2.2.1.5.10.20', '192.168.0.30');</br><br />  // 192.168.0.30 - Destination IP (IP адрес назначения)</br><br />  SNMP.AddIntValue('1.3.6.1.4.1.171.12.9.2.2.1.20.10.20', 2); // Задать значение Permit (разрешить) прохождению пакетов;</br><br />  // 2 - Permit</br><br />  // 1 - Deny</br><br />  SNMP.AddStrValue('1.3.6.1.4.1.171.12.9.2.2.1.21.10.20', '00020000'); // Задать порт 15</br><br />  // 00020000 =&gt; 0002 = 0000 0000 0000 0010 =&gt; Port 15</br><br />  // x 00000000 – шестнадцатеричное число, каждый октет (4 разряда) которого</br><br />  // представляют 4 порта. Старший разряд представляет порт 1. Соответсвенно</br><br />  // 3 разряд 4 октета представляет порт 15. BinToHex(0010) = 2.</br><br />  SNMP.AddIntValue('1.3.6.1.4.1.171.12.9.2.2.1.22.10.20', 4); // Создать и применить правило</br><br />  // 1 - active</br><br />  // 2 - notInService</br><br />  // 3 - notReady</br><br />  // 4 - createAndGo</br><br />  // 5 - createAndWait</br><br />  // 6 - destroy</br><br />  if (!SNMP.SendSet) {</br><br />&nbsp;&nbsp;&nbsp;&nbsp;Host.Echo('Запрос на создание ACL правила был не выполнен.');  </br><br />  }</br><br />}
Romik40189.7506134259
Страницы: 1 2 След.
Читают тему (гостей: 2)