user@devops:~$ cat README.md
igmp-watch
# Description
igmp-watch (cpp-igmp-watch) is a Linux kernel multicast group membership monitor written in C++23 with zero external dependencies. It reads /proc/net/igmp (IGMPv3, IPv4 groups) and /proc/net/igmp6 (MLDv2, IPv6 groups) and shows every group: address in readable form (the kernel prints IPv4 groups in reversed byte order — 010000E0 -> 224.0.0.1), number of local users (subscribed sockets), group timer, reporter (last reporting pid) and decoded IPv6 state flags (TE, GS, UNSOL, RI — 0000000C -> UNSOL|RI). Decodes well-known groups: all-hosts, all-routers, mDNS, mDNSv6, LLMNR, SSDP, IGMP, RIP, MLDv2, VRRP. Filters --iface NAME, --v4/--v6, --users N and --top N. Watch mode (--watch N) with join/leave deltas between snapshots; per-frame flush on pipes. JSON output (--json) with summary + groups array validated with python -m json.tool. --demo with 19 groups of a synthetic office + wifi + docker + LAN bridge host and --file for dumps with # comments (includes sample-igmp.table and sample-igmp6.table). Self-test 69 checks: hex helpers, IPv6 compression, v4/v6 parsers, names, filters, demo, JSON and real /proc reads. Zero deps: g++ -std=c++23 -O2 -Wall -Wextra.
# Key features
$ Reads /proc/net/igmp (IGMPv3, IPv4) and /proc/net/igmp6 (MLDv2, IPv6) into one table
$ Address decoding: IPv4 groups in reversed byte order (010000E0 -> 224.0.0.1)
$ IPv6 compression to standard notation (ff020000...0000fb -> ff02::fb)
$ Well-known names: all-hosts, all-routers, mDNS, mDNSv6, LLMNR, SSDP, IGMP, RIP, MLDv2
$ Decoded IPv6 flags (TE, GS, UNSOL, RI) and last reporter pid
$ Watch mode (--watch N) with join/leave deltas; filters --iface, --v4/--v6, --users, --top
$ Validatable JSON; --demo with 19 synthetic groups; --file tolerates # comments; --no-color with mutable ANSI palette
# Gallery
# Technologies used