Бинарный ридер для содержимого пакетов?

Я создал приложение, которое извлекает сетевые пакеты, используя этот пример: 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

Хотя это по-прежнему не дает объяснения того, как понять содержимое пакета, но возможность фильтровать пакеты очень помогает.


person Sakuya    schedule 23.09.2014    source источник
comment
Откровенно говоря, BinaryReader в основном используется для чтения данных, записанных с помощью BinaryWriter. Поскольку здесь это не так: забудьте о BinaryReader — это вам не поможет.   -  person Marc Gravell    schedule 23.09.2014


Ответы (1)


Существует множество различных типов возможных сетевых пакетов, большинство из которых хорошо задокументированы.

Что вам нужно сделать, так это загрузить Wireshark (у Microsoft также есть аналогичный инструмент, название которого ускользает от меня), запустить с его помощью несколько захватов и просмотреть журналы.

Wireshark распознает практически каждый существующий сетевой пакет, поэтому вы можете использовать его журналы, чтобы определить, какой тип пакета вам нужно распознать, а затем найти его спецификацию в Google.

person 500 - Internal Server Error    schedule 23.09.2014