我目前正在使用 C# 的 pcap 库,想知道是否有任何内置函数可以删除 IP 标头和 TCP/UDP/ECT 标头?如果没有,任何人都可以发布他们是如何实现删除此类标题的吗?
问问题
894 次
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);
}
不过,我正在查看的代码可能已经有将近一年的历史了,所以对我到底在做什么有点模糊。从我发布的这个问题中可以看出,我正在做一些 http-packet 重建。实际上,看看那个帖子,我这样做的时候已经是一年多以前了!
于 2010-11-24T10:55:25.417 回答
1
我是 SharpPcap 的作者,它是 c# 的 pcap 包装器/库。
如果您使用 SharpPcap,SharpPcap 会将数据包分解为数据报。所以你最终会得到一个包含一个 IpPacket 的 EthernetPacket,其中包含一个 UdpPacket。如果您只想要 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 回答