1

我建立了一个库来做 IGMP 的东西。现在,愚蠢的是,我的图书馆还进行了存在监控以确保其他人仍然是该组的一部分。

IGMP 在较低级别做完全相同的事情。分开消息,轮询路由器它仍然是同一组的一部分,整个事情。我刚刚重复了所有相同的工作,它可能没有那么健壮。

如果我可以利用这些数据包,我可以让一切变得更清洁(而且我不会重新发明轮子)。

任何人都有这样做的经验吗?也许创建某种疯狂的套接字?我不想为此使用 libpcap。我认为语言并不重要,只要可以在 Windows/Linux 上使用 Sockets

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 回答