【python|scapy】sprintf輸出時(shí)raw_string轉(zhuǎn)string
問(wèn)題描述
最近在有python的scapy模塊分析TCP報(bào)文,一直有一個(gè)關(guān)于轉(zhuǎn)義字符的問(wèn)題困惑著我,查找的很多資料后仍然百思不得其解,請(qǐng)大神指教。請(qǐng)看代碼:
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()
結(jié)果為:
打印出的字符串中‘x11’、’x04’等等應(yīng)該相當(dāng)于一個(gè)字符,但是解釋器把它們當(dāng)成了4個(gè)字符。所以四條報(bào)文中的tcp數(shù)據(jù)長(zhǎng)度不是17而成了為53,52,46,52。查閱scapy源碼發(fā)現(xiàn)sprintf('%Raw.load%')函數(shù)實(shí)現(xiàn)提取tcp數(shù)據(jù)段,并將其轉(zhuǎn)化為字符串,但是轉(zhuǎn)化后的結(jié)果類似于raw_string,字符串中的‘x’失效了,被當(dāng)做了2個(gè)字符。請(qǐng)問(wèn)該怎么轉(zhuǎn)化,使得轉(zhuǎn)義字符‘x’生效,使得類似‘x11’、’x04’等等的字符被看做一個(gè)字符而不是4個(gè)?
問(wèn)題解答
回答1:經(jīng)過(guò)查閱資料,我發(fā)現(xiàn)要用個(gè)函數(shù)實(shí)現(xiàn)rawstring轉(zhuǎn)string,即可。
raw = raw.replace(’’’,’’)string = raw.decode(’string_escape’)
輸出的結(jié)果就正確了
相關(guān)文章:
1. 求救一下,用新版的phpstudy,數(shù)據(jù)庫(kù)過(guò)段時(shí)間會(huì)消失是什么情況?2. php - mysql 模糊搜索問(wèn)題3. javascript - 在 vue里面用import引入js文件,結(jié)果為undefined4. php工具箱配置第二個(gè)vhost主機(jī)時(shí)不生效,報(bào)錯(cuò)You don’t have permission5. php - 微信開(kāi)發(fā)驗(yàn)證服務(wù)器有效性6. javascript - 求幫助 , ATOM不顯示界面!!!!7. javascript - js setTimeout在雙重for循環(huán)中如何使用?8. html - 爬蟲時(shí)出現(xiàn)“DNS lookup failed”,打開(kāi)網(wǎng)頁(yè)卻沒(méi)問(wèn)題,這是什么情況?9. [python2]local variable referenced before assignment問(wèn)題10. javascript - 我的站點(diǎn)貌似被別人克隆了, google 搜索特定文章,除了域名不一樣,其他的都一樣,如何解決?
