我需要制作一个工具来修改数据包中的 VLanTaggedFrame.VLanIdentifier 。 问题是,我的数据包可能有多个vlan标签。
实际上它在1到3个标签之间,但是我想做一个递归过程,而不是在 if 语句中建立链。
我需要一些方法来提取每个 VLanTaggedFrame 图层(放入列表或数组)而不知道有多少(只要 x.EtherType == EthernetType.VLanTaggedFrame ,但 x 不断更改图层堆栈。)
知道我该怎么做吗?
我的主要方向是使用 packet.ethernet.vlantaggedframe.payload ,但它是 Datagram 类型,似乎没有'有效负载'in datagram 类型对象,所以我不能递归地执行 x = x.payload 。
任何帮助将不胜感激:)
答案 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;
}