Задача#
ПО, использующего для передачи данных технологии multicast-потоков, не так уж много. Не в последнюю очередь потому, что настроить мультикаст между двумя точками это достаточно нетривиальная задача. Поэтому, когда необходимость всё-таки возникает, для отладки и поиска проблем необходим какой-либо инструмент. В моем случае всё усложнялось тем, что мне было необходимо отладить работу VMware VSAN, который как известно работает по multicast, а инструментарий в ESXi не так уж велик. Однако, к счастью, там есть полноценный Python.
Требования#
Итак, нам понадобится инструмент, который может:
- Отправлять пакеты в заданную мультикаст-группу
- Подписываться на заданную мультикаст-группу
- Сообщать о полученных пакетах, как своих, так и стороннего ПО
- Использовать для своей работы заданный интерфейс
- Плюсом будет изменяемый TTL, что может помочь в отладке
Использование#
Всё, что необходимо для запуска - код и Python 2. Строка запуска выглядит так:
1smt.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
например:
1smt.py --group 224.1.1.1 --port 12345 --bind 192.168.10.10 --ttl 10
Просто запускаем на всех N проблеммных узлах и смотрим на вывод, где сразу будет видно, кто и откуда успешно получает данные, а где они не проходят.
Пример#
1[email protected]# smt.py --group 224.1.1.1 --port 12345
2[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:...]
3[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:...]
4[2016:10:23 21:43:06.651] [INFO] Received packet from 10.10.0.107:62335 with data HELLO FROM host7.example.com
5[2016:10:23 21:43:06.675] [INFO] Received packet from 10.10.0.102:63079 with data HELLO FROM host2.example.com
6[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:...]
7[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:...]