Как получить данные из 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