【问题标题】:Check if layer exist in current packet in pyshark-Python检查pyshark-Python中当前数据包中是否存在图层
【发布时间】:2015-12-21 23:57:07
【问题描述】:

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

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

当层存在于 pkt.layers 中时,该条件运行良好,但当层存在时,我得到“raise AttributeError()” 不存在,在我的情况下,第一个数据包中不存在 tcp 层,然后我得到错误并且脚本停止。

pkt.layers的内容有这种格式

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

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

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

提前致谢

【问题讨论】:

    标签: python layer pcap


    【解决方案1】:

    试试这个:

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

    例子:

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

    为我工作!

    【讨论】:

    • 感谢 Azo 的回答和帮助!
    猜你喜欢
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 2019-07-30
    • 2019-05-03
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 2020-07-29
    相关资源
    最近更新 更多