2015-07-20 101 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