Невозможно преобразовать из SharpPcap.RawCapture в PacketDotNet.Packet

StackOverflow https://stackoverflow.com/questions/7379516

  •  28-10-2019
  •  | 
  •  

Вопрос

Я следил за руководством на http://www.codeproject.com/KB/IP/sharppcap.aspx для реализации простого сниффера пакетов для автоматизации аутентификации для меня, мне удалось добраться до раздела фильтрации, и до сих пор мне пришлось внести некоторые корректировки в код руководства для этогоработать, но теперь я в тупике.

Я получаю следующее сообщение об ошибке:

<цитата>

Лучшее совпадение перегруженного метода для «PacketDotNet.TcpPacket.GetEncapsulated (PacketDotNet.Packet)» имеет некоторые недопустимые аргументы

Аргумент 1: невозможно преобразовать из SharpPcap.RawCapture в PacketDotNet.Packet

Но я еще не сделал никаких ссылок на PacketDotNet (до сих пор все было SharpPcap).

Включен весь имеющийся у меня код, проблема в функции device_OnPacketArrival ().

родовое слово
Это было полезно?

Решение

SharpPcap.RawPacket используется для хранения необработанных данных, захваченных через сетевой адаптер, но PacketDotNet требует, чтобы пакет был проанализирован, прежде чем методы GetEncapsulated () будут работать.Необходимый вам шаг будет выглядеть так:

родовое слово

Затем вы можете извлечь инкапсулированный код TcpPacket с помощью метода GetEncapsulated(), передав его packet.

Пример 12 в исходном коде SharpPcap загрузите по адресу https://sourceforge.net/projects/sharppcap/ показывает синтаксис и способы изменения пакетов.

Помните, что PacketType.GetEncapsulated() возвращает ссылку на эту часть пакета, поэтому его изменение приведет к изменению исходного пакета.

Другие советы

В качестве альтернативы вы можете использовать Pcap.Net , у которого есть только один класс пакета, который можно динамически анализировать, чтобы получить все, что онможет содержать без преобразования пакетов.

Вы просто получаете объект Packet и делаете (например):

родовое слово

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

В качестве обновления ответа Криса Моргана (потому что я обнаружил, что делаю это сегодня), getEncapsulated() теперь устарел, вместо этого вы должны использовать packet.Extract() для извлечения инкапсулированного пакета.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top