2010-11-24 7 views
1

В настоящее время я использую библиотеку pcap для C# и задавался вопросом, есть ли какие-либо встроенные функции для удаления заголовков IP и заголовков TCP/UDP/ECT? Если нет, может ли кто-нибудь опубликовать, как они добились удаления таких заголовков?Пакет регистрации с Pcap для C#

ответ

2

Вы используете 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-пакетов, как можно видеть в this question, которые я опубликовал. На самом деле, глядя на эту тему, прошло более года назад, когда я это делал!

1

Я автор SharpPcap, pcap wrapper/library для C#.

Если вы используете SharpPcap, SharpPcap разбивает пакет на дейтаграммы. Таким образом, вы получите EthernetPacket, содержащий IpPacket, в котором содержится UdpPacket. Если вы хотите только УДП пакета вы можете легко извлечь, что, как:

Packet p = Packet.ParsePacket(rawCapture.LinkLayerType, rawCapture.Data); 
var udpPacket = UdpPacket.GetEncapsulated(p); 
if(udpPacket != null) { Console.WriteLine("found udp packet '{0}'", udpPacket); } 

UdpPacket.GetEncapsulated() пересекают дейтаграммы ищет пакет. Такой же подход работает для всех типов, которые анализируются.

Смежные вопросы