1

現在、C# 用の pcap ライブラリを使用していますが、IP ヘッダーと TCP/UDP/ECT ヘッダーを削除する組み込み関数があるかどうか疑問に思っていました。そうでない場合、そのようなヘッダーの削除をどのように達成したかを投稿できますか?

4

2 に答える 2

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年近く前のものなので、正確に何をしていたかについて少しぼんやりしています。私が投稿したこの質問に見られるように、私はいくつかのhttp-packet再構築を行っていました。実際、そのスレッドを見ると、私がこれを行っていたのは1年以上前のことです。

于 2010-11-24T10:55:25.417 に答える
1

私は、c# 用の pcap ラッパー/ライブラリである SharpPcap の作成者です。

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

于 2012-01-31T02:16:45.873 に答える