Using socat for multicast receiving and proxying

socat is a very handy networking tool. Here are some examples for multicast manipulation

Receive multicast data to stdout or file

If you save common mpeg-ts IPTV multicast this way, you can play it with any decent player, like vlc or mplayer.

SRC=239.1.2.3;SRCP=1234;IF=eth0

socat -T 3 UDP4-RECV:$SRCP,bind=$SRC,ip-add-membership=$SRC:$IF,reuseaddr -

socat -T 3 UDP4-RECV:$SRCP,bind=$SRC,ip-add-membership=$SRC:$IF,reuseaddr - > stream.ts

Create high-available multicast proxy

socat relays packets from 239.1.1.1:1234 to 239.2.1.1:1234 with multicast ttl=8.
If no packet arrives in 3 seconds (-T 3), socat exits and script runs another socat which joins another multicast 239.1.1.2:1234 and continues with relaying. You can add as many sources as you want, they will be used in a round-robin fashion. If you want to switch to next source, just kill currently running socat.

DST=239.2.1.1:1234
while true
do
 SRC=239.1.1.1;SRCP=1234;IF=eth0
 socat -T 3 UDP4-RECV:$SRCP,bind=$SRC,ip-add-membership=$SRC:$IF,reuseaddr UDP4-SENDTO:$DST,ip-multicast-ttl=8
 SRC=239.1.1.2;SRCP=1234;IF=eth0
 socat -T 3 UDP4-RECV:$SRCP,bind=$SRC,ip-add-membership=$SRC:$IF,reuseaddr UDP4-SENDTO:$DST,ip-multicast-ttl=8
 ...
done

One thought on “Using socat for multicast receiving and proxying”

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.