检查pyshark-Python中当前数据包中是否存在图层

时间:2015-12-21 23:57:08

标签: python layer pcap

我使用pyshark读取pcap文件,我想打印每个数据包中包含的每个层的一些字段。

我设置if条件来检查当前数据包中是否存在特定图层,如果为True,则打印一些字段。

当pkt.layers中存在图层时,条件很有效,但我得到了#34;引发了AttributeError()"当层 不存在,在我的情况下tcp层不存在于第一个数据包中然后我得到错误并且脚本停止。

pkt.layers的内容具有此格式

[<ETH Layer>, <IP Layer>, <TCP Layer>]

它似乎是一个列表但如果我尝试评估如下,如果存在任何这些字符串,结果总是为假。

>>> layers = pkt.layers
>>> layers
[<ETH Layer>, <IP Layer>, <TCP Layer>]
>>> "<ETH Layer>" in layers
False

检查某层是否存在的正确方法是什么?

我目前的代码是:

import pyshark

# Open saved trace file
cap = pyshark.FileCapture('file.pcap')

for pkt in cap:
    lyr = pkt.layers # Current layers

    if p.eth in lyrs: print p.eth.src  # If Ethernet layer exists print ethernet value
    if p.ip in lyrs: print p.ip.src    # If IP layer exists print source IP
    if p.tcp in lyrs: print p.tcp.port  # If TCP layer exists print port

提前致谢

1 个答案:

答案 0 :(得分:1)

试试这个:

if("protocol" in str(p.layers):
    doSomething()

示例:

if("TCP" in str(p.layers)):
    print "tcp found"

适合我!