Задача
ПО, использующего для передачи данных технологии multicast-потоков, не так уж много. Не в последнюю очередь потому, что настроить мультикаст между двумя точками это достаточно нетривиальная задача. Поэтому, когда необходимость всё-таки возникает, для отладки и поиска проблем необходим какой-либо инструмент. В моем случае всё усложнялось тем, что мне было необходимо отладить работу VMware VSAN, который как известно работает по multicast, а инструментарий в ESXi не так уж велик. Однако, к счастью, там есть полноценный Python.
Требования
Итак, нам понадобится инструмент, который может:
- Отправлять пакеты в заданную мультикаст-группу
- Подписываться на заданную мультикаст-группу
- Сообщать о полученных пакетах, как своих, так и стороннего ПО
- Использовать для своей работы заданный интерфейс
- Плюсом будет изменяемый TTL, что может помочь в отладке
Использование
Всё, что необходимо для запуска - код и Python 2. Строка запуска выглядит так:
где:
--group GROUP
- мультикаст группа для подписки и отправки пакетов, например224.1.1.1
--port PORT
- порт мультикаст группы, например12345
--bind BIND
- какой IP-адрес использовать как источник, опционально, например192.168.1.1
--ttl TTL
- 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:...]