无法读取pyshark IEEE802.1AD层解析器值

时间:2015-03-27 19:53:27

标签: python wireshark wireshark-dissector

背景
我尝试使用pyshark模块剖析包含triple 802.1AD tags的数据包。当打印包的层时,存在两个IEEE8021AD层。

 [<ETH Layer>, <IEEE8021AD Layer>, <IEEE8021AD Layer>, <IP Layer>, <DATA Layer>]

我可以从同一个数据包的Wireshark显示中看到,第一个IEEE8021AD层包含两个VLAN标记,第二个层包含第三个标记:

Wireshark packet dissection

问题:

  
      
  1. 我无法弄清楚如何使用pyshark模块访问第二个IEEE802.1AD图层,因为两个图层都有相同的名称。

  2.   
  3. 在第一个IEEE802.1AD层,我可以访问第一个VLAN的DEI和Priority字段,但不能访问第二个VLAN的相同值。 DEI和Priority的解剖器字段名称在共享该层的两个VLAN之间是相同的。

  4.   

此数据包从Wireshark导出的XML显示两个名称相同的ieee8021ad图层,以及名称相同的dei和优先级解析器字段:

<proto name="ieee8021ad" showname="IEEE 802.1ad, S-VID: 9, C-VID: 8" size="4" pos="14">
    <field name="ieee8021ad.priority" showname="101. .... .... .... = Priority: 5" size="1" pos="14" show="5" value="5" unmaskedvalue="a0"/>
    <field name="ieee8021ad.dei" showname="...0 .... .... .... = DEI: 0" size="1" pos="14" show="0" value="0" unmaskedvalue="a0"/>
    <field name="ieee8021ad.svid" showname=".... 0000 0000 1001 = ID: 9" size="2" pos="14" show="9" value="9" unmaskedvalue="a009"/>
    <field name="ieee8021ad.priority" showname="100. .... .... .... = Priority: 4" size="1" pos="18" show="4" value="4" unmaskedvalue="80"/>
    <field name="ieee8021ad.dei" showname="...0 .... .... .... = DEI: 0" size="1" pos="18" show="0" value="0" unmaskedvalue="80"/>
    <field name="ieee8021ad.cvid" showname=".... 0000 0000 1000 = ID: 8" size="2" pos="18" show="8" value="8" unmaskedvalue="8008"/>
    <field name="ieee8021ah.etype" showname="Type: 802.1ad Provider     Bridge (Q-in-Q) (0x88a8)" size="2" pos="20" show="0x88a8" value="88a8"/>
  </proto>
  <proto name="ieee8021ad" showname="IEEE 802.1ad, ID: 7" size="4" pos="22">
    <field name="ieee8021ad.priority" showname="011. .... .... .... = Priority: 3" size="1" pos="22" show="3" value="3" unmaskedvalue="60"/>
    <field name="ieee8021ad.dei" showname="...0 .... .... .... = DEI: 0" size="1" pos="22" show="0" value="0" unmaskedvalue="60"/>
    <field name="ieee8021ad.id" showname=".... 0000 0000 0111 = ID: 7" size="2" pos="22" show="7" value="7" unmaskedvalue="6007"/>
    <field name="ieee8021ah.etype" showname="Type: ARP (0x0806)" size="2" pos="24" show="0x0806" value="0806"/>
    <field name="ieee8021ah.trailer" showname="Trailer: 000000000000" size="6" pos="54" show="00:00:00:00:00:00" value="000000000000"/>
  </proto>

我尝试使用pprint模块查看数据结构,但在尝试打印图层时没有有用的输出。

#!/usr/bin/python

from __future__ import print_function
import pyshark
import pprint

cap = pyshark.FileCapture(filename)

pp = pprint.PrettyPrinter(indent=4)

for i, pkt in enumerate(cap):

    print("----------------- Packet %d --------------------" % i)
    print(pkt.layers)

    print(pkt.ieee8021ad)

    print("        dei      = %s" % pkt.ieee8021ad.dei)
    print("        priority = %s" % pkt.ieee8021ad.priority)
    print("        cvid     = %s" % pkt.ieee8021ad.cvid)
    print("        svid     = %s" % pkt.ieee8021ad.svid)
    #print("        type     = %s" % pkt.ieee8021ad.type)  # 'type'     doesn't exist>

代码输出:

----------------- Packet 1 --------------------
[<ETH Layer>, <IEEE8021AD Layer>, <IEEE8021AD Layer>, <IP Layer>, <DATA Layer>]
Layer IEEE8021AD:
    101. .... .... .... = Priority: 5
    ...1 .... .... .... = DEI: 1
    .... 0000 0000 1000 = ID: 8
    Type: 802.1ad Provider Bridge (Q-in-Q) (0x88a8)
    .... 0000 0000 1001 = ID: 9
    100. .... .... .... = Priority: 4
    ...0 .... .... .... = DEI: 0

    dei      = 1   # Drop Eligibility Indicator for VLAN #2
    priority = 5   # Priority for VLAN #2
    cvid     = 8   # ID for VLAN #2
    svid     = 9   # ID for VLAN #1

0 个答案:

没有答案