【问题标题】:Extract layers recursively (w/o knowing how many there are in a packet)递归提取层(不知道数据包中有多少层)
【发布时间】:2014-04-11 02:43:16
【问题描述】:

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

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

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

知道我该怎么做吗?

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

任何帮助将不胜感激:)

【问题讨论】:

    标签: c# pcap.net


    【解决方案1】:

    这样的事情怎么样:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-27
      • 2014-10-27
      • 2011-09-22
      • 2013-08-24
      • 1970-01-01
      • 2012-11-13
      • 2013-06-22
      相关资源
      最近更新 更多