递归提取层(W/O知道数据包中有多少个)



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

实际上是在1〜3标签之间

我需要某种方法来提取每个 vlantaggedFrame layer(进入列表或数组),而又不知道有多少个(只要 x.Ethertype == ethertype == ethernettype.vlantaggedframe 但是其中 x 在不断更改图层的堆栈)。

知道我该怎么做?

我的主要方向是采用 packet.ethernet.vlantaggedframe.payload ,但它是 datagram 类型,似乎没有'有效载荷 datagram 键入对象,所以我不能递归 x = x.payload

任何帮助将不胜感激:)

这样的事情怎么样:

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