I'm using tcpdump to capture multicast packets and had to code up a custom program to join multicast feeds so tcpdump will "see" the packets. Just wondering if netcat or any other applications can perform this function instead?


You can do this using the ip maddr add command.


ip maddr [ add | del ] MULTIADDR dev STRING 


It attaches/detaches a static link layer multicast address to listen on the interface. Note that it is impossible to join protocol multicast groups statically. This command only manages link layer addresses.

address LLADDRESS (default)
    the link layer multicast address. 
dev NAME
    the device to join/leave this multicast address. 


Example for a wired connection:

ip maddr add ff02::fb dev eth0

Example for a wireless connection:

ip maddr add dev wlan0
  • Running this on an Ubuntu 14.04 box yields the following error message: "ff02" is invalid lladdr. Error: "ff02" is not a legal ll address. Jun 11 '15 at 18:05
  • 3
    After more digging, it appears that ip maddr only works with link-layer multicast addresses and not protocol-layer multicast addresses. Jun 11 '15 at 18:35
  • @NathanOsman- Have you ever find way to subscribe protocol-layer multicast addresses?
    – kit
    Aug 7 '17 at 9:45
  • 2
    Unfortunately this answer doesn't answer the question as it only works for link-layer i.e. MAC addresses. The IPv6 example fails as mentioned in 1st comment, and the IPv4 example fails but quietly (i.e. the group is not joined nor listed by ip maddr show)
    – Pierz
    Nov 30 '17 at 11:22

One can use socat to subscribe to groups. This works nicely for both L2 and L3 subscription:


This will subscribe to group using the interface with address The UDP4-DATAGRAM: bit listens for packets on a dummy group and udp port that should not receive any data to prevent socat from also outputting everything to stdout. If, instead, you want to direct the payload to stdout, change that group and port to be actual group and port that you want to subscribe to.

Multiple comma-separated ip-add-membership directives can be specified to subscribe to multiple groups at the same time. When socat exits, it seems to clear out the IGMP subscriptions too.


In addition to socat answer, here is a heavyweight solution - smcroute. This application run as a daemon and can be controlled on the fly:

smcroutectl join eth0
smcroutectl leave eth0

Use the "Receive" part in https://stackoverflow.com/questions/603852/multicast-in-python, omit the definition of the MCAST_PORT and the line "sock.bind ..." and replace the last line (print ...) with pass. That gives you a program similar to the SOCAT example without reading a dummy port.


You can use omping for this.

Example: To test multicast traffic between 3 hosts - execute then the same command line on each host:

omping example.org example.com example.net

Omping uses by default but you can tell it to use any other multicast address.

If you snoop IGMP traffic you see the report (join) and leave messages then.

In contrast to socat omping also supports IPv6, in case you want to test MLD instead of IGMP.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.