递归提取图层(不知道数据包中有多少)

时间:2014-03-07 19:15:11

标签: c# pcap.net

我需要制作一个工具来修改数据包中的 VLanTaggedFrame.VLanIdentifier 。 问题是,我的数据包可能有多个vlan标签。

实际上它在1到3个标签之间,但是我想做一个递归过程,而不是在 if 语句中建立链。

我需要一些方法来提取每个 VLanTaggedFrame 图层(放入列表或数组)而不知道有多少(只要 x.EtherType == EthernetType.VLanTaggedFrame ,但 x 不断更改图层堆栈。)

知道我该怎么做吗?

我的主要方向是使用 packet.ethernet.vlantaggedframe.payload ,但它是 Datagram 类型,似乎没有'有效负载'in datagram 类型对象,所以我不能递归地执行 x = x.payload

任何帮助将不胜感激:)

1 个答案:

答案 0 :(得分:0)

这样的事情怎么样:

EthernetBaseDatagram vlanParent = packet.Ethernet;
List<ILayer> vlanLayers = new List<ILayer>();
while (vlanParent.EtherType == EthernetType.VLanTaggedFrame)
{
    VLanTaggedFrameDatagram vlan = vlanParent.VLanTaggedFrame;
    vlanLayers.Add(vlan.ExtractLayer());
    vlanParent = vlan;
}