如何验证 Scapy 中的数据包是不是具有 TCP 层
Posted
技术标签:
【中文标题】如何验证 Scapy 中的数据包是不是具有 TCP 层【英文标题】:How to verify if a packet in Scapy has a TCP layer如何验证 Scapy 中的数据包是否具有 TCP 层 【发布时间】:2014-04-01 09:14:20 【问题描述】:我想知道如何验证我从 Scapy 中的 sr1()
函数收到的数据包是否包含 TCP 层,以便对 TCP 标志进行一些处理。
【问题讨论】:
【参考方案1】:您有两种选择,in
运算符是一种。
>>> TCP in pkt
True
>>> if TCP in pkt:
... # Handle TCP Flags
Scapy 中的数据包对象也有一个名为haslayer()
的函数。
>>> pkt = IP()/TCP()
>>> pkt.haslayer(TCP)
1
>>> pkt2 = IP()/UDP()
>>> pkt2.haslayer(TCP)
0
>>> Packet.haslayer.__doc__
'true if self has a layer that is an instance of cls. Superseded by "cls in self" syntax.'
【讨论】:
非常感谢 RyPeck 的回答,问题是我要检查的数据包是 Scapy 中 sr1() 命令的结果,所以很遗憾,这些选项对我不起作用。我收到此错误消息:AttributeError: 'NoneType' object has no attribute 'haslayer' 听起来是因为您实际上并没有从sr1
收到数据包。以上是关于如何验证 Scapy 中的数据包是不是具有 TCP 层的主要内容,如果未能解决你的问题,请参考以下文章