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

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

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

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

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


person jM2.me    schedule 05.10.2011    source источник


Ответы (2)


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

packet.PayloadPacket.PayloadPacket.PayloadData
person jM2.me    schedule 05.10.2011
comment
ты мой герой :)) - person Vlad Isoc; 26.10.2016

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

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

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

Крис

Автор SharpPcap/Packet.Net

person Chris Morgan    schedule 05.10.2011