Я создал приложение, которое извлекает сетевые пакеты, используя этот пример: http://www.codeproject.com/Articles/4217/Packet-Sniffing-with-Winpcap-Functions-Ported-to-a
Я намерен использовать его для получения содержимого определенных пакетов, отправленных определенному приложению с сервера, меня не интересуют никакие другие пакеты. Интересующий меня пакет имеет значение 1, которое периодически обновляется.
Я преобразовал его в VB .Net, так как это мое предпочтение, поэтому я буду давать свои фрагменты кода в VB, хотя я также понимаю C#, поэтому не стесняйтесь приводить примеры с использованием C#.
У него есть событие с параметром 's', которое содержит содержимое полученного пакета в массиве байтов.
Я конвертирую этот массив для чтения с помощью двоичного считывателя следующим образом:
Dim stream As System.IO.MemoryStream = New System.IO.MemoryStream(s)
Dim reader As New System.IO.BinaryReader(stream)
Dim pos As Long = 0
Dim length As Long = reader.BaseStream.Length
Затем я пройдусь по циклу с переменной 'pos' в качестве текущей позиции, увеличенной на тип данных текущих байтов. (Например: something = reader.ReadString() pos += something.Length)
Моя единственная проблема: я не уверен, какие типы мне следует искать? Какова «структура» пакета? Можно ли получить сервер, с которого был отправлен пакет, и приложение, которому он был отправлен?
Я никогда раньше не пробовал использовать что-то подобное для пакетов, у меня был только опыт получения данных из файла базы данных пользовательского формата.
Редактировать: я нашел что-то более полезное, в котором есть документация, объясняющая исходный/целевой IP-адрес и способы фильтрации по ним, и она выглядит намного более полной, чем приведенный выше пример, упомянутый ранее.
http://www.codeproject.com/Articles/12458/SharpPcap-A-Packet-Capture-Framework-for-NET
Хотя это по-прежнему не дает объяснения того, как понять содержимое пакета, но возможность фильтровать пакеты очень помогает.
BinaryReader
в основном используется для чтения данных, записанных с помощьюBinaryWriter
. Поскольку здесь это не так: забудьте оBinaryReader
— это вам не поможет. - person Marc Gravell   schedule 23.09.2014