TL; DR - Pilih satu:
sudo ip addr add 233.54.12.234/32 dev eth1 autojoin
socat STDIO UDP4-RECV:22001,ip-add-membership=233.54.12.234:eth1 > /dev/null
Pada awalnya saya akan mengatakan "hanya menggunakan ip maddress add
dan selesai dengan itu". Masalahnya ip maddress
hanya mempengaruhi alamat multicast lapisan tautan bukan protokol alamat multicast ( man 8 ip-maddress
).
Itu dikatakan menggunakan autojoin
bendera dengan kata kerja alamat melakukan trik dengan baik.
Ini menimbulkan beberapa pertanyaan selanjutnya. Saya berasumsi karena Anda akan menjalankan tcpdump
atau tshark
bahwa Anda memiliki izin root. Jika Anda tidak 22001 adalah port bernomor tinggi dan utilitas lain seperti socat
juga akan menyelesaikan sesuatu.
Jangan mengambil kata-kata saya untuk itu. Hanya untuk menguji ini kita dapat menghasilkan paket UDP multicast dengan socat
atau ncat
(umumnya dikemas melalui nmap
/ nmap-ncat
).
Pada sejumlah host, jalankan salah satu dari dua kombinasi berikut:
Pilihan 1:
sudo ip addr add 233.54.12.234/32 dev eth1 autojoin
Pilihan 2:
socat -u UDP4-RECV:22001,ip-add-membership=233.54.12.234:eth1 /dev/null &
Opsi pertama akan membutuhkan root, atau setidaknya kemampuan CAP_NET_ADMIN
. Opsi kedua tidak memerlukan root, tetapi juga mengharapkan untuk berjalan di latar depan dan dengan demikian mungkin kurang kondusif untuk skrip (meskipun melacak ID proses anak dan membersihkannya dengan trap
di BASH mungkin hanya apa yang Anda cari.
Setelah selesai (tetapi sebelum kita mencoba pengujian tcpdump
/ tshark
perintah), pastikan bahwa kernel mengenali antarmuka setelah bergabung dengan grup IGMP yang benar. Jika Anda merasa super mewah, Anda bisa membuat hex keluar /proc/net/igmp
, tapi saya sarankan hanya berlari netstat -gn
.
Setelah Anda memverifikasi bahwa Anda melihat antarmuka berlangganan grup yang benar jalankan perintah tcpdump Anda:
tcpdump -nnXs 0 -i eth1 udp port 22001 and dst 233.54.12.234
Atau, jika Anda tidak ingin sepenuhnya pergi ke rute tcpdump (atau menemukan jawaban ini dan hanya ingin tahu melihat tindakan multicast), Anda dapat menggunakan socat
perintah di atas untuk bergabung dan menggemakan konten STDOUT
dengan mengganti /dev/null
dengan STDOUT
:
socat -u UDP4-RECV:22001,ip-add-membership=233.54.12.234:eth1
Kemudian, dari komputer lain gunakan salah satu dari dua opsi berikut untuk mengirim beberapa data uji sederhana:
Pilihan 1:
socat STDIO UDP-DATAGRAM:233.54.12.234:22001
Pilihan 2:
ncat -u 233.54.12.234 22001
Ketika Anda menjalankan salah satu dari perintah itu maka ia akan secara interaktif menunggu input. Cukup ketik beberapa hal, tekan enter untuk mengirim, lalu CTRL+D
ketika Anda selesai mengirim EOF
pesan.
Pada titik ini Anda seharusnya telah melihat tes ujung ke ujung dan dengan beberapa perintah membangun sistem obrolan terburuk, paling tidak aman di dunia.
-p
bendera, dalam versi standar tcpdump, ternyata modus promiscuous off , karena itu pada default. Dalam mode promiscuous, ia akan melihat semua lalu lintas, termasuk lalu lintas multicast, terlepas dari apakah Anda memiliki langganan yang ditetapkan - kecuali Anda berada di jaringan yang diaktifkan dan langganan harus dibuat agar peralihan Anda meneruskan lalu lintas.