Q&A 2. Обнаружение топологии сети по CDP/LLDP

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

Обнаружение топологии сети по CDP/LLDP

English translation

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

Надо обнаружить топологию сети через вывод CDP (считаем что CDP есть на всех устройствах). Для старта должен быть известен IP-адрес одного устройства и параметры подключения по SSH ко всем устройствам в сети.

Надо подключиться к первому устройству, дать команду sh cdp neighbors detail, получить всех соседей и их IP-адреса и подключиться к каждому соседу. На каждом соседе опять дать команду sh cdp neighbors detail и получить соседей этого устройства. Так надо пройтись по всей сети и собрать информацию об устройствах и топологии.

Например, если топология такая и известен IP-адрес R1:

.====.    .=====.    .====.
| R1 |----| SW1 |----| R2 |  
'===='    '====='    '===='
             |
             |
          .====.
          | R3 |
          '===='

Порядок работы может быть примерно такой:

  1. Подключаемся к R1 и получаем соседей CDP - только SW1
  2. Подключаемся к SW1 и получаем три соседа R1, R2, R3 - подключаемся только к R2 и R3, так как на R1 уже были