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

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

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

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

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

2 ответа

Решение

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

packet.PayloadPacket.PayloadPacket.PayloadData

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

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

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

Крис

Автор SharpPcap/Packet.Net

Другие вопросы по тегам