2010-11-24 2 views
1

現在、C#用のpcapライブラリを使用していますが、IPヘッダーとTCP/UDP/ECTヘッダーを削除する組み込み関数があるかどうか疑問に思っていましたか?もしそうでなければ、誰もそのようなヘッダーの除去を達成した方法を投稿できますか?C#用のPcapによるパケットロギング

答えて

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); 
} 

私がこれをやった場所を見ているコードは、おそらくほぼ1年前ですが、ちょうど私がやっていたことに少しぼやけています。私はthis questionに掲載されているように、httpパケットの再構築を行っていました。実際には、そのスレッドを見て、それは1年前に私がこれをやっていた時でした!

1

私はSharpPcapの著者、C#のpcapラッパー/ライブラリです。

SharpPcapを使用していた場合、SharpPcapはパケットをデータグラムに分割します。ですから、あなたはUdpPacketを含むIpPacketを含むEthernetPacketで終わるでしょう。あなただけのUDPパケットを望んでいた場合は、簡単にそのように抽出することができます。

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()パケットを探してデータグラムを横断。同じ種類のアプローチが、解析されるすべての型に対して機能します。

関連する問題