Я создал приложение, которое получает сетевые пакеты, используя этот пример: 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
Хотя до сих пор не дает объяснение того, как понимать содержимое пакета самостоятельно, но, будучи в состоянии фильтровать пакеты большая помощь.
Честно говоря, 'Основное использование BinaryReader' - читать данные, которые были написаны с помощью' BinaryWriter'. Так как это не так: * забудьте о 'BinaryReader' * - он вам не поможет. –