Jump to content

Recommended Posts

Posted (edited)

Привет всем.

Какие-то плохие люди вырезают кабель. Причем режут не так, чтобы унести, а так, чтобы хуже сделать, на каждом этаже.

За ночь по два-три подъезда режут. Уже четвертый раз за неделю.

В сети около 120 dlink'ов, все управляемые DES-3550, DES-3552.

Может у кого-нибудь есть скриптик (желательно на perl, но подойдет любой), работающий с cable-diag, поделитесь пожалуйста.

Скрипт не обязательно мониторящий длинну кабеля (такой уж был бы вообще что надо), хотя-бы который как-нибудь работал с cable-diag.

Edited by peektoseen
Posted (edited)

Да нет :) этих я думаю не занесет к нам. Новых никого не появлялось. У нас всего два провайдера. Мы и МРК. Скорее всего какой-нибудь недовольный (или команда недовольных). Психов хватает.

Edited by peektoseen
Posted

как то так:

 

#!/bin/sh

sw=172.16.0.222

port=2

# проверим длину линка

rx=`cat rx-$sw-$port`

tx=`cat tx-$sw-$port`

 

snmpset -v2c -c private $sw .1.3.6.1.4.1.171.12.58.1.1.1.12.$port i 1

set x `snmpget -v2c -c private $sw .1.3.6.1.4.1.171.12.58.1.1.1.8.$port`

rx_new=$5

rx_cmp=`expr $5 + 5`

set x `snmpget -v2c -c private $sw .1.3.6.1.4.1.171.12.58.1.1.1.9.$port`

tx_new=$5

tx_cmp=`expr $5 + 5`

 

if [ $rx_cmp -lt $rx -o $tx_cmp -lt $tx ]; then

echo \(spizdili kabel\) | mail -s "CABLE link: $rx_new at port $port $sw" 7927xxxxxxx@sms.mgsm.ru

fi

Posted

sub test_cable
{
   my %report;
       $report{uid} = shift;
   my $port = shift;
   my ($session, $error) = Net::SNMP->session(
      -hostname  => shift || 'localhost',
      -community => shift || 'private',
   );
   my $oid = '1.3.6.1.4.1.171.12.58.1.1.1.';
   my @pair_status = (
       'ok',
       'open',
       'short',
       'open-short',
       'crosstalk',
       'unknown',
       'count',
       'no-cable',
       'other'
   );
   my $max_tries = 10;
   $report{'text'} = '';
   if (!defined $session) {
      printf "ERROR: %s.\n", $error;
      return undef;
   }


   my $result = $session->set_request(-varbindlist => [ $oid.'12.'.$port , INTEGER, 1 ],);

   if (!defined $result) {
      printf "ERROR: %s.\n", $session->error();
      $session->close();
      return undef;
   }

   # Wait while test executes

   my ($tries, $test_passed) = (0, 0);
   while ($tries < $max_tries && $test_passed != 1)
   {
       $result = $session->get_request(-varbindlist => [ $oid.'12.'.$port ],);

       if (!defined $result) {
          printf "ERROR: %s.\n", $session->error();
          $session->close();
          return undef;
       }
       if ($result->{$oid.'12.'.$port} == 3)
       {
           $test_passed = 1;
           next;
       }
       $tries++;
       sleep(1);
   }

   $result = $session->get_request(-varbindlist => [ $oid.'3.'.$port,  # Link state (1 = up)
                                                        $oid.'4.'.$port,  # Pair 1 (0 = ok)
                                                        $oid.'5.'.$port,  # Pair 2 (0 = ok)
                                                        $oid.'6.'.$port,  # Pair 3 (8 = no cable; ok for 100 mbit)
                                                        $oid.'7.'.$port,  # Pair 4 (8 = no cable; ok for 100 mbit)
                                                        $oid.'8.'.$port,  # Pair 1 length
                                                        $oid.'9.'.$port,  # Pair 2 length
                                                        $oid.'10.'.$port, # Pair 3 length (unused)
                                                        $oid.'11.'.$port, # Pair 4 length (unused)
                                                         ],);
   if (!defined $result) {
          printf "ERROR: %s.\n", $session->error();
          $session->close();
          return undef;
   }
   if ($result->{$oid.'3.'.$port} != 1)
   {
       $report{text} .= 'No link. ';
       $report{nextcheck} = int(time() + 3600 + rand(300));
   }
   if ($result->{$oid.'8.'.$port} == 0 && $result->{$oid.'9.'.$port} == 0 &&
       $result->{$oid.'4.'.$port} == 7 && $result->{$oid.'5.'.$port} == 7)
   {
       $report{text} .= 'No cable. ';
   }
   else
   {
       for (my $pair = 1; $pair <= 2; $pair++)
       {
           if ($result->{$oid.($pair+3).'.'.$port} > 0)
           {
               $report{text} .=
                  'Pair '.$pair.' status "'.
                  $pair_status[$result->{$oid.($pair+3).'.'.$port}].'" at '.
                  $result->{$oid.'8.'.$port}.' m. ';
           }
       }
       if ($result->{$oid.'8.'.$port} !=
           $result->{$oid.'9.'.$port})
       {
           $report{text} .= 'Pairs length mismatch! 1 is '.
                             $result->{$oid.'8.'.$port}. ' m, 2 is '.
                             $result->{$oid.'9.'.$port}. ' m. ';
       }
       else
       {
#            $report{text} .= 'Cable length is '.$result->{$oid.'8.'.$port}.' m. ';
           $report{length} = $result->{$oid.'8.'.$port};
       }
   }
   $session->close();
   $report{text} = 'OK' if ($report{text} eq '');
#       print (Dumper(\%report));
   return %report;
}

Вот Вам ф-ция. Дальше прикрутите сами. Параметры:

1) Идентификатор пользователя (потом возвращается назад).

2) Номер порта.

3) IP свитча.

4) SNMP community.

 

У меня оно работает на 3028.

Posted

По моему человек не совсем понимает что ему нужно.

 

Может проще отслеживать падение портов на коммутаторе, а потом уже тестить кабель кабель?

 

В таком случае надо вначале смотреть падения портов, а только потом тестировать кабель. Падают порты, по определенному алгоритму, подается сигнал и выводятся айпишка упавшего коммутатора, адрес установки ну и порты что упали.

После этого тестируете кабель, если всё гуд -- отбой. Если обрывы примерно на одинаковом метре -- то действуете.

 

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

 

Ну а дальше -- либо ваши ребята, которые дежурят выезжают на проблемный адрес, либо же бройлера, если оборудование под охраной.

 

А так что проверять будете? И с какой периодичностью? Раз в минуту, раз в час? Тестить все порты, или только упавшие?

Обрезать -- достаточно нескольких минут.

 

Но вот что скажут ваши абоненты, у которых будет пропадать линк при тесте?

Posted

dyadyajack может как вариант делать трап на пропадание линка? А потом смотреть cable_diag'ом?

Posted

У нас коммутаторы отправляли syslog на сервер,

на сервере логи отслеживались в реальном времени:

1) одновременное гашение нескольких клиентских портов,

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

Если сработало - то шлётся пачка SMS и емейлов.

 

Исходники здесь: http://sources.homelink.ru/linkdown/

 

Как минимум однажды благодаря им любители художественной резки по кабелю были схвачены с поличным,

с охапкой свежесрезанного кабеля в руках: http://47news.ru/articles/42097/

Posted

Ну как по-мне, то без логсервера нельзя.

Ilya Evseev тут в 1 пункте дело говорит.

Сигнальная петля -- тоже отлично. Но лучше использовать как дополнение, на адресе, который железно попадает в зону риска. Так экономиться время на реакцию, не надо проверять действительно ли порезали.

 

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

 

Как-по мне, то если добавить тест упавших портов, то можно потерять время. А при порезке каждая секунда на счету. Но есть фактор отключения света.

 

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

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

 

Нажать два раза на строчку с портом труда не составит. Но вот если данные покажут что всё в норме, то можно отбой давать дежурящей бригаде.

 

ЗЫ:. По такой системе мониторинга поймали не менее 4 любителей поживиться медью.

Ну и конечно нужно понимать, что от чудика-аборигена, который возле квартиры обрежет кабло, дабы насолить ничто не поможет. Разве что железные трубки или короба.

 

А так, даже одного аборигена, который резал кабель в своем доме поймали :)

  • 1 month later...
Posted

У нас на сети тоже есть такая проблема. Режут обычно многопарники, с целью наживы, бывает просто балуются.

На многопарнике от свитча до кросса в подъезде - замыкается один порт в петлю, он наблюдается в системе мониторинга (в нашем случае WhatsUp Gold или Zabbix), параллельно если упал порт из списка скрипт звонит в саппорт и трезвонит пока его не отключат.

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

Posted

неповерите дядьки, тоже замыкали на портах, переловили столько, что всю тюрьму можно было заселить, им давали условку и отпускали, закон хромает у нас....в последний раз поймали 2-ух молодых пацанов, 20 и 22 года, больше не режут))

Posted

У нас как то был бум обрезания кабелей. Заночь вырезали по ~4 дома, от А до Я. Жесть, техники не успевали всех перепротягивать, только сделаешь, оп, ночью все срезают снова, кабеля уносили с собой. Металюги проклятые. Длилось месяца 2. После перестали вырезать. Наверно уже сидят.

  • 5 weeks later...
Posted

У нас на свитчах DES-3200 показывают на 40 метрах, метров 70, это нормально просто как бы оно так и будет, потому что это всё таки свитч и кабель всякий бывает, но вроде хороший тянем.

Posted

У нас на свитчах DES-3200 показывают на 40 метрах, метров 70, это нормально просто как бы оно так и будет, потому что это всё таки свитч и кабель всякий бывает, но вроде хороший тянем.

 

Второй конец изолирован или подключен? Если подключен, то результат неадекватен, таков уж метод TDR.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.