2017-02-21 30 views
0

我想通過scapy分析TCP數據包。我使用pkt.sprintf('%Raw.load%')來提取tcp數據。但輸出字符串的長度有問題。但是'\'被認爲是str而不是Escaped字符。所以'\ x11'被認爲是4個不同的字符串而不是ASCII字符。scapy.sprintf的輸出是一個原始字符串嗎?爲什麼長度錯誤?

這裏是我的代碼:

from scapy.all import * 
def findTCPdata(pkt): 
    raw = pkt.sprintf("%Raw.load%") 
    print raw 
    print 'length of TCP data: '+ str(len(raw)) 
def main(): 
    pkts = rdpcap('XXX.pcap') 
    for pkt in pkts: 
     findTCPdata(pkt) 
if __name__ == '__main__': 
    main() 

enter image description here

每個TCP數據的長度應爲17,而不是在屏幕(53,52,46,52)的值。 4 TCP數據是:

'U\x11\x04\x92\x02\x03\x1e\[email protected]\x03\xf8q=e\xcb\x15\r' 
'U\x11\x04\x92\x02\x03.\[email protected]\x03\xf8q=e\xcb\xb8\x05' 
'U\x11\x04\x92\x02\x03X\[email protected]\x03\xf8q=e\xcbiO' 
'U\x11\x04\x92\x02\x03n\[email protected]\x03\xf8q=e\xcb\xdb\xe3' 

請幫我解決problem.Thank你!

回答

0

我明白了。我需要一個函數來將rawstring轉換爲字符串。 所以我添加代碼行後3(原始= pkt.sprintf( 「%Raw.load%」)),如:

raw = raw.replace('\'','') 
string = raw.decode('string_escape') 

則輸出是正確

相關問題