我建立了一个用来做IGMP的库。现在,愚蠢的是,我的库也做了在线状态监控,以确保其他人仍然是组的一部分。
IGMP在较低的级别上做完全相同的事情。分离消息,轮询路由器它仍然是同一组的一部分,整个事情。我只是重复了所有相同的工作,它可能不是那么健壮。
如果我可以利用这些包,我可以让一切变得更干净(而且我不会重复发明轮子)。
有谁有这样做的经验吗?也许会创造出某种疯狂的套接字?我不想为它使用libpcap。我认为语言并不重要,只要可以在Windows/Linux上使用Sockets就可以了
发布于 2011-10-14 06:58:33
好吧,我找到了一个方法。它现在非常脏,因为我必须手动提取所需的信息,但这实际上是如何在接口上拉取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,你可以看到数据包的分解
https://stackoverflow.com/questions/7760116
复制相似问题