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”