2015-07-20 100 views
1

比方说,我已经创造了Scapy的像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识别某个图层?

回答

2

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

E.g.如果您使用的协议通过TCP端口2222,您可以添加下面一行到你的模块:

bind_layers(TCP, MyProtocol, dport=2222) 

Scapy的将尝试使用MyProtocol解剖TCP有效载荷MyProtocol。

+0

正是我需要的,谢谢! – vicco

+0

很高兴这有所帮助。如果您使用的是python3,请查看我的scapy fork与pcapng支持和其他改进http://github.com/phaethon/scapy –

+0

谢谢。虽然我目前不使用python3,但我会看看它。 – vicco