Oct. 24, 2016, 3:13 a.m.
Posted by soar

Multicast Test Tool

Задача

ПО, использующего для передачи данных технологии multicast-потоков, не так уж много. Не в последнюю очередь потому, что настроить мультикаст между двумя точками это достаточно нетривиальная задача. Поэтому, когда необходимость всё-таки возникает, для отладки и поиска проблем необходим какой-либо инструмент. В моем случае всё усложнялось тем, что мне было необходимо отладить работу VMware VSAN, который как известно работает по multicast, а инструментарий в ESXi не так уж велик. Однако, к счастью, там есть полноценный Python.

Требования

Итак, нам понадобится инструмент, который может:

  • Отправлять пакеты в заданную мультикаст-группу
  • Подписываться на заданную мультикаст-группу
  • Сообщать о полученных пакетах, как своих, так и стороннего ПО
  • Использовать для своей работы заданный интерфейс
  • Плюсом будет изменяемый TTL, что может помочь в отладке

Использование

Всё, что необходимо для запуска - код и Python 2. Строка запуска выглядит так:

smt.py [-h] --group GROUP --port PORT [--bind BIND] [--ttl TTL]

где:

  • --group GROUP - мультикаст группа для подписки и отправки пакетов, например 224.1.1.1
  • --port PORT - порт мультикаст группы, например 12345
  • --bind BIND - какой IP-адрес использовать как источник, опционально, например 192.168.1.1
  • --ttl TTL - TTL пакетов, опционально, например 10

например:

smt.py --group 224.1.1.1 --port 12345 --bind 192.168.10.10 --ttl 10

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

Пример

[email protected]# smt.py --group 224.1.1.1 --port 12345
[2016:10:23 21:43:06.410] [INFO] Received packet from 10.10.0.107:31978 with data bytes: [63:6d:6d:64:73:6e:65:74:00:06:...]
[2016:10:23 21:43:06.521] [INFO] Received packet from 10.10.0.108:24961 with data bytes: [63:6d:6d:64:73:6e:65:74:00:06:...]
[2016:10:23 21:43:06.651] [INFO] Received packet from 10.10.0.107:62335 with data HELLO FROM host7.example.com
[2016:10:23 21:43:06.675] [INFO] Received packet from 10.10.0.102:63079 with data HELLO FROM host2.example.com
[2016:10:23 21:43:06.864] [INFO] Received packet from 10.10.0.105:27098 with data bytes: [63:6d:6d:64:73:6e:65:74:00:06:...]
[2016:10:23 21:43:06.934] [INFO] Received packet from 10.10.0.103:54078 with data bytes: [63:6d:6d:64:73:6e:65:74:00:06:...]

Ссылки

Comments