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

标签 python layer pcap

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

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

当该图层存在于 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

提前致谢

最佳答案

试试这个:

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

示例:

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

对我有用!

关于python - 检查 pyshark-Python 中当前数据包中是否存在图层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34406391/

相关文章:

python - 给定数据框中的 pd.Interval 列,过滤落在 Interval 范围内的值

ios - CAGradientLayer 没有得到形状

jquery - 垂直滚动div不同的速度

python - 全局变量和 python flask

python - 在 HTML 中使用 for 循环访问变量 (python Flask)

python - 如何在 Django 中创建自定义混合?

java - 在 java 中通过架构层向上冒泡事件

c++ - 如何通过内容正则表达式匹配过滤 pcap(例如 tcpdump)文件?

python - Scapy 和 tcpreplay : bypass temporary file for performance

machine-learning - 在 MATLAB 中使用朴素贝叶斯分类器进行互联网流量分类