检查pyshark中当前数据包中是否存在层-Python
Check if layer exist in current packet in pyshark-Python
我正在使用 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
提前致谢
试试这个:
if("protocol" in str(p.layers):
doSomething()
示例:
if("TCP" in str(p.layers)):
print "tcp found"
适合我!
我正在使用 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
提前致谢
试试这个:
if("protocol" in str(p.layers):
doSomething()
示例:
if("TCP" in str(p.layers)):
print "tcp found"
适合我!