Отслеживание трафика IGMP - PullRequest
1 голос
/ 14 октября 2011

Я создал библиотеку для работы с IGMP. Теперь глупо то, что моя библиотека также проводит мониторинг присутствия, чтобы убедиться, что другие все еще являются частью группы.

IGMP делает то же самое на более низком уровне. Разделение сообщений, опрос маршрутизатора о том, что он все еще является частью одной и той же группы, и все такое. Я только что повторил ту же самую работу, и она, вероятно, не такая надежная.

Я могу сделать все намного чище (и я бы не стал изобретать велосипед), если бы я мог использовать эти пакеты.

У кого-нибудь есть опыт в этом? Может быть, создать какую-то сумасшедшую розетку? Я не хочу использовать libpcap для этого. Я не думаю, что язык имеет значение, насколько это возможно, используя Sockets на Windows / Linux

1 Ответ

1 голос
/ 14 октября 2011

Хорошо, нашел способ. Сейчас это очень грязно, так как мне приходится извлекать необходимую информацию вручную, но по сути это то, как вы извлекаете данные 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, вы можете увидеть разбивку пакетов

...