【发布时间】:2015-12-24 02:38:40
【问题描述】:
我正在尝试使用 pyshark 读取 pcap 文件。似乎 pyshark 创建了一个对象列表,其中每个对象 有关于包内每一层的信息。
我只想评估数据包中是否存在层。也许有人可以帮助我。
对象“层”的列表是这样的:
[<ETH Layer>, <IP Layer>, <SCTP Layer>, <DATA Layer>]
但是这个评估失败了,因为列表里面是对象而不是字符串。
if <ETH Layer> in layers: print "Yes, Ethernet layer exists"
if '<ETH Layer>' in layers: print "Yes, Ethernet layer exists"
以下是我的测试...
Python 2.7.10 (default, May 23 2015, 09:40:32) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import pyshark
>>> file = pyshark.FileCapture('C:\\files\\input.pcap')
>>> packet=file[0]
>>> layers=packet.layers
>>> layers
[<ETH Layer>, <IP Layer>, <SCTP Layer>, <DATA Layer>, <SCTP Layer>, <DATA Layer>]
>>> if packet.eth in layers: print "Yes, Ethernet layer exists"
...
Yes, Ethernet layer exists
>>>
Yes, Ethernet layer exists
>>> if '<ETH Layer>' in layers: print "Yes, Ethernet layer exists"
...
>>>
这个评估给出了正确的输出
if packet.eth in layers: print "Yes, Ethernet layer exists"
这两个失败,因为评估为 False
if <ETH Layer> in layers: print "Yes, Ethernet layer exists"
if '<ETH Layer>' in layers: print "Yes, Ethernet layer exists"
*更新:
如果我测试 packet.ip、packet.eth、packet.sctp,它只有在层 ip、eth 或 sctp 存在时才有效,如果某些层不存在(即 tcp),我会收到以下错误。
>>> if packet.tcp in layers: print "Yes, Ethernet layer exists"
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\pyshark\packet\packet.py", line 110, in __getattr__
raise AttributeError()
AttributeError
谢谢
【问题讨论】:
-
只检查
if packet.eth有什么问题? -
嗨转,如果我测试 packet.ip、packet.eth、packet.sctp 它只有在层 ip、eth 或 sctp 存在时才有效,如果某些层不存在(即 tcp)。请看我的更新。谢谢。
-
是的,请看下面我的回答。