Scapy:嗅探自制层

时间:2015-07-20 12:00:42

标签: python packet scapy sniffing

我们说我已经在scapy中创建了一个自己的层,如

class MyProtocol(Packet):

    name = "MyProtocol"
    fields_desc = [ IntField("layerLength", 8), # always the same
                    ShortField("numberA", 4),
                    ShortField("numberB", 2),
                    IntField("numberC", 2) ]

如果我有两个设备,一个发送包含此自制层的数据包在顶部,另一个发送嗅探网络流量 - 第二个设备如何检测其中一个嗅探数据包是否包含此特殊层? Scapy已经识别出很多层,但是如何让它识别出我自己制作的层呢?

我知道我可以简单地获取每个数据包的Raw部分,在字节级别上剖析它,例如,检查" layerLength"字段确实包含图层的总长度,或者添加一些特殊的唯一字段,但这看起来太复杂了,因为Scapy已经知道了一些图层。那么有没有办法让Scapy识别某个层?

1 个答案:

答案 0 :(得分:2)

Scapy使用所谓的层绑定来指示何时应用特定的数据包解析器。您可以在每个图层模块中看到scapy源代码示例。

E.g。如果您通过TCP端口2222使用协议,则可以在模块中添加以下行:

bind_layers( TCP, MyProtocol, dport=2222)

Scapy将尝试使用MyProtocol将TCP有效负载解析为MyProtocol。