#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