窥探IGMP流量

时间:2011-10-13 20:34:19

标签: c# sockets igmp

我建立了一个用于执行IGMP操作的库。现在,愚蠢的是,我的图书馆也会进行监控,以确保其他人仍然是小组的成员。

IGMP在较低级别执行完全相同的操作。分离消息,轮询路由器,它仍然是同一组的一部分,整个事情。我刚刚重复了所有相同的工作,而且可能不那么强大。

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

任何人都有这方面的经验吗?也许创造某种疯狂的插座?我不想使用libpcap。我不认为语言很重要,只要它可以在Windows / Linux上使用套接字

1 个答案:

答案 0 :(得分: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中搜索,你可以看到数据包崩溃