Jump to content
Калькуляторы

Режут кабель. Нужен скрипт.

Привет всем.

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

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

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

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

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

Edited by peektoseen

Share this post


Link to post
Share on other sites

Эр-Телеком в город пришёл?

Share this post


Link to post
Share on other sites

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

Edited by peektoseen

Share this post


Link to post
Share on other sites

как то так:

 

#!/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

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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

 

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

 

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

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

 

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

 

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

 

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

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

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

 

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

 

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

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

Share this post


Link to post
Share on other sites

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

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

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

 

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

 

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

 

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

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

 

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

 

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

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

 

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

А понятно, да как раз вставлен в сетевуху и поднят интерфейс ну или не поднят.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this