Используете ли вы PacketXLib ? Я использовал это раньше и нашел, что это достаточно просто для написания кода. Извлечь заголовки достаточно просто, просто зная основные принципы протоколов
public const int ETHERNETLEN = 14; // length of ethernet header
public const int IPLEN = 20; // length of ip header
public const int TCPLEN = 20; // length of tcp header
Предполагая, что вы используете ту же библиотеку, что и я, вы можете просто обойти заголовки, чтобы получить необработанные данные
int dataOffset = ETHERNETLEN + IPLEN + TCPLEN;
string rawData = "";
// Throw all the data into a string first up so we can work with it easier
for (int i = dataOffset; i < aPacket.DataSize; i++)
{
byte nByte = (byte)aPacket.DataArray.GetValue(i);
rawData += Convert.ToChar(nByte);
}
Код, который я смотрю, где я сделал это, вероятно, почти год, так что немного смутно от того, что именно я делал. Я выполнял некоторую реконструкцию http-пакета, как видно из этого вопроса , который я опубликовал. На самом деле, глядя на эту ветку, это было более года назад, когда я делал это!