2016-06-16 52 views
0

我目前正在使用scapy發送數據包,並且遇到了一個奇怪的問題。當我創建了一個包這樣:將scapy數據包轉換爲字符串會生成一個E?

pack = IP(dst="127.0.0.1", id=local_ID)/UDP()/chunk 

,然後將該包轉換成字符串(這樣我就可以通過一個套接字發送)

sendPack = str(pack) 

sendPack的結果是錯誤的。

舉例來說,在我的測試文件,我有1-8000下令這樣

1 
2 
3 
... 

那麼數字,當我print("SEND_PACK: "+sendPack) 它產生如下:

E 
2 
3 
... 

其他的都是完美除了E

我不明白E來自哪裏,或什麼 它的意思是。

另外值得一提的是,我已經驗證了pack包含正確的數據,而無論什麼樣的測試文件的第一行,輸出的第一行始終是一個E

謝謝!

回答

0

首先,您正在打印一個數據包,而不是您的UDP數據報的內容。 IPv4數據包的前兩個字段是版本和IHL,默認情況下Scapy中的值分別爲4(對於IP版本4)和5(5個32位的字)。如果你把它放在一個十六進制的字節中,那麼這個字母就是字母「E」。這就是爲什麼你總是將E看作字符串的第一個字節。

如果你想檢查你的數據包是什麼,你應該使用Scapy的show()功能:sendPack.show()

其次,你可以使用Scapy的的send(),函數來發送你的包而不理會插座自己:send(sendPack)

+0

好了,有沒有辦法得到數據報的僅僅是內容?我只關心每個數據包的負載和ID。 – Swoldier

0

對於那些有興趣,我通過以下操作解決了該問題:

正如上面所指出的, E是我打印數據包的結果,而不是它的內容。爲了獲得我想要的內容,我必須做到以下幾點:

sendPack = pack[UDP].load  #Get the packet's load at the UDP layer 
id = pack[IP].ID    #Get the ID at the IP layer 

的Scapy的文檔是稀疏的,所以我不知道,我可以訪問每一個數據包這種方式的各個字段。

這裏的where I found this fix

相關問題