1

IGMP を行うためのライブラリを作成しました。さて、ばかげたことですが、私のライブラリはプレゼンス監視も行って、他の人がまだグループの一員であることを確認しています.

IGMP は、下位レベルでまったく同じことを行います。別れのメッセージ、それがまだ同じグループの一部であるというルーターへのポーリング、すべて。同じ作業をすべて繰り返しましたが、おそらくそれほど堅牢ではありません。

それらのパケットを利用できれば、すべてをよりきれいにすることができます (そして、車輪を再発明する必要はありません)。

誰でもこれを行った経験がありますか? たぶん、ある種のクレイジーなソケットを作成しますか?libpcap を使用したくありません。Windows/Linuxでソケットを使用できる限り、言語は問題ではないと思います

4

1 に答える 1

1

よし、方法を見つけた。必要な情報を手動で抽出する必要があるため、今は非常に汚いですが、これは本質的にインターフェイスで IGMP データを取得する方法です (生データを取得するには管理者権限が必要であることに注意してください)。

var buffer = new byte[65536];
var s = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Igmp); // filter out non IGMP
byte[] one = BitConverter.GetBytes(1);
s.Bind(new IPEndPoint(IPAddress.Parse("192.168.1.148"), 0)); // Which interface to listen on
s.IOControl(IOControlCode.ReceiveAll, one, one); // enter promiscuous mode
s.Recieve(buffer); // get yourself some data (BeginRecieve didn't seem to work here)

次に、そのバッファで何かをします。Wireshark を突っ込むと、パケットの内訳を見ることができます

于 2011-10-13T22:58:33.193 に答える