Как получить данные из TCPPacket с помощью SharpPcap?

#c# #packet-sniffers #sharppcap

#c# #анализаторы пакетов #sharppcap

Вопрос:

Мне нужен небольшой сниффер для моего отчета, поэтому я выбрал C # и SharpPcap.

 packet = Packet.ParsePacket(rawCapture.LinkLayerType, rawCapture.Data);
tcpPacket = TcpPacket.GetEncapsulated(packet);
  

У меня есть необработанный пакет со всеми данными пакета. Затем я получаю из него пакет с некоторой информацией, такой как источник / назначение / протокол / и т.д. После этого я получаю tcp-пакет из этого.

Теперь, как мне получить только фактические данные пакета, которые программное обеспечение отправило / получило?

Ответ №1:

Было достаточно просто.

 packet.PayloadPacket.PayloadPacket.PayloadData
  

Комментарии:

1. ты мой герой :))

2. Спасибо, что ответили на ваш собственный вопрос. Вы только что сэкономили мне 30 минут на экспериментах =). 1 за вопрос и ответ

Ответ №2:

tcpPacket.PayloadData или PayloadPacket должны быть тем, что вы хотите. PayloadData допустимо, если пакет.Net не знает, как разбирать данные в подпакет, и PayloadPacket действителен, если это так. Я не уверен, что сегодня происходит какой-либо синтаксический анализ tcp-пакетов, поэтому вы должны быть в безопасности, говоря tcpPacket.PayloadData.

Возможно, api следует изменить таким образом, чтобы PayloadData всегда были необработанными данными в tcp-пакете, а PayloadPacket имеет значение null или не null в зависимости от того, было ли проанализировано содержимое пакета. Затем вы можете получить содержимое любого пакета, Ethernet, IP и т. Д., Используя PayloadData. Мысли?

Вы могли бы сослаться на некоторый вложенный пакет PayloadPacket из «пакета», но трудно понять, как создается пакет. Это Ethernet-> IP-> Tcp или есть обертки вокруг пакета Ethernet? С помощью TcpPacket.GetEncapsulated() эти ситуации обрабатываются за вас.

Крис

Автор SharpPcap/Packet.Net