2014-01-24 75 views
1

背景 我正在使用scapy編寫Windows操作系統檢測腳本。雖然我可以使用其他工具如p0f,nmap和SMB腳本等,但這部分功能只是整體的一小部分,所以我致力於scapy路線。scapy SMB/CIFS解碼

問題 作爲scapy的新手,我在使用SMB解碼器時遇到了一些問題。到目前爲止,我有:

def disp(pkt): 
    print(pkt.getlayer(IP).src) 
    if pkt.haslayer(Raw): 
     print(SMBSession_Setup_AndX_Request(pkt.getlayer(Raw).load).NativeOS) 

foo=sniff(prn=disp,filter="port 445",count=10) 

正如你所看到的,我只是通過SMBSession_Setup_AndX_Request()類餡「原始」層,希望它會做正確的事與「原始」的有效載荷。

這看起來似乎是功能性的,但返回「Windows 4.0」的NativeOS屬性的「默認」類設置(嗯,它是在我的版本的scapy的smb.py中),並且有時會將我視爲堆棧跟蹤,取決於Mac是否在網絡上,執行CIFS。我盲目地認爲,我可以抓住NativeOS並完成它,當然是構思不清。

問題 如果我的方法是完全錯誤的,你會使用Scapy的的嗅()方法是正確的方法,以自定義協議解碼?

非常感謝您的任何建議,

sc。

回答

2

簡而言之,Scapy的SMB層實現並不處理SMB通過TCP(基本上TCP/445)「直接」,而是通過TCP(基本上TCP/139)通過NetBios訪問SMB。

我不認爲這會是真的很難改變,但你必須潛入layers/smb.py爲(例如,決定哪些SMB*層已被使用,Scapy的使用值從底層的領域NBTSession圖層,它不再存在於SMB上的TCP)。

另一種選擇,如果你想從Scapy識別操作系統而不依賴於SMB,那就是使用p0f模塊。試試吧:

>>> load_module('p0f') 
>>> sniff(prn=prnp0f, store=False) 
+0

感謝您的回覆 - 我會在tshark的某個地方加入popen,併爲皮帶和護腕進行p0f操作。 HTTP用戶代理也將通過使用scapy而得到很好的效果。非常感謝! – swisscheese