如何验证 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 层的主要内容,如果未能解决你的问题,请参考以下文章

Python渗透测试工具有哪些

如何从 pcap 文件中提取所有数据包的 TCP 标头?

如何将UDP数据包发送到scapy中的特定UDP dst端口?

Linux-Python-Scapy的TCP扫描

Scapy 数据包嗅探器触发对每个嗅探数据包的操作

python数据包之利器scapy详解!