Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 递归提取层(不知道数据包中有多少层)_C#_Pcap.net - Fatal编程技术网

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

C# 递归提取层(不知道数据包中有多少层),c#,pcap.net,C#,Pcap.net,我需要制作一个工具来修改数据包中的VLanTaggedFrame.VLanIdentifier。 问题是,我的数据包可能有多个vlan标记 实际上,它在1~3个标记之间,但我想做一个递归过程,而不是做一个if语句链 我需要某种方法来提取每个VLanTaggedFrame层(到一个列表或数组中),而不知道有多少层(只要x.EtherType==EthernetType.VLanTaggedFrame,但其中x不断地改变层堆栈) 你知道我该怎么做吗 我的主要方向是采用packet.ethernet.

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

实际上,它在1~3个标记之间,但我想做一个递归过程,而不是做一个if语句链

我需要某种方法来提取每个VLanTaggedFrame层(到一个列表或数组中),而不知道有多少层(只要x.EtherType==EthernetType.VLanTaggedFrame,但其中x不断地改变层堆栈)

你知道我该怎么做吗

我的主要方向是采用packet.ethernet.vlataggedframe.payload,但它属于数据报类型,并且数据报类型对象中似乎没有“payload”,因此我不能递归地执行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;
}
EthernetBaseDatagram vlanParent=packet.Ethernet;
列表层=新列表();
while(vlanParent.EtherType==EthernetType.VLanTaggedFrame)
{
VLanTaggedFrame数据报vlan=vlanParent.VLanTaggedFrame;
添加(vlan.ExtractLayer());
vlanParent=vlan;
}