использование socat для многоадресной передачи потока mpeg-2

У меня есть поврежденный файл ts, содержащий некоторый поток MPEG-2, со случайными преднамеренными ошибками пакетов. Идея состоит в том, чтобы проанализировать поток в другом приложении, которое я пытаюсь создать, и обнаружить ошибки.

Если я использую socat как

socat -u open:test.ts udp:localhost:1234
sleep 0.001

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

socat -u open:test.ts udp:239.48.208.1:1234
sleep 0.001

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

Однако это не обязательно должен быть поток MPEG-2. Я просто хочу знать, как выполнить многоадресную рассылку содержимого двоичного файла по определенному многоадресному адресу и порту.


person meguli    schedule 21.11.2019    source источник


Ответы (1)


Я не пробовал, но есть много подробных примеров на dest-unreach .org Герхарда Ригера, автора socat. Первый пример — многоадресный клиент и несколько принимающих серверов в общей сети 192.168.10.*. Клиент 192.168.10.1 отправляет на многоадресный адрес, а принимающие серверы могут отправлять ответные пакеты. На любом из серверов, например. 192.168.10.2, у нас есть

socat UDP4-RECVFROM:6666,ip-add-membership=224.1.0.1:192.168.10.2,fork EXEC:hostname

что означает получение многоадресной рассылки на 224.1.0.1 и разветвление процесса для каждого пакета. Процесс (например, hostname) может отправить один или несколько ответных пакетов обратно. 192.168.10.2 — это интерфейс для приема (поэтому отличается на каждом сервере); см. man-страницу socat для ip-add-membership.

На отправляющем клиенте имеем

socat STDIO UDP4-DATAGRAM:224.1.0.1:6666,range=192.168.10.0/24

который отправляет данные со стандартного ввода для многоадресной рассылки. Он распечатает все полученные ответы.

person meuh    schedule 22.11.2019