2014-09-23 5 views
1

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

Моя единственная проблема: я не уверен, какие типы я должен искать? Что такое «структура» пакета? Возможно ли получить сервер, на который был отправлен пакет, и приложение, на которое оно было отправлено?

Я никогда раньше не пытался использовать что-то подобное для пакетов, у меня только был опыт получения данных из файла базы данных пользовательского формата.


Edit: Я нашел что-то немного более полезное, который имеет документацию, объясняющую об источнике/IP назначения и как фильтровать их, и это выглядит намного более полным, чем выше пример, приведенный выше.

http://www.codeproject.com/Articles/12458/SharpPcap-A-Packet-Capture-Framework-for-NET

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

+0

Честно говоря, 'Основное использование BinaryReader' - читать данные, которые были написаны с помощью' BinaryWriter'. Так как это не так: * забудьте о 'BinaryReader' * - он вам не поможет. –

ответ

0

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

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

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