Как получить данные из TCPPacket с помощью SharpPcap? - PullRequest
4 голосов
/ 05 октября 2011

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

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

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

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

Ответы [ 2 ]

9 голосов
/ 05 октября 2011

Достаточно просто.

packet.PayloadPacket.PayloadPacket.PayloadData
3 голосов
/ 05 октября 2011

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

...