【python|scapy】sprintf輸出時raw_string轉(zhuǎn)string
問題描述
最近在有python的scapy模塊分析TCP報(bào)文,一直有一個關(guān)于轉(zhuǎn)義字符的問題困惑著我,查找的很多資料后仍然百思不得其解,請大神指教。請看代碼:
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)于一個字符,但是解釋器把它們當(dāng)成了4個字符。所以四條報(bào)文中的tcp數(shù)據(jù)長度不是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個字符。請問該怎么轉(zhuǎn)化,使得轉(zhuǎn)義字符‘x’生效,使得類似‘x11’、’x04’等等的字符被看做一個字符而不是4個?
問題解答
回答1:經(jīng)過查閱資料,我發(fā)現(xiàn)要用個函數(shù)實(shí)現(xiàn)rawstring轉(zhuǎn)string,即可。
raw = raw.replace(’’’,’’)string = raw.decode(’string_escape’)
輸出的結(jié)果就正確了
相關(guān)文章:
1. mysql優(yōu)化 - mysql count(id)查詢速度如何優(yōu)化?2. angular.js - 不適用其他構(gòu)建工具,怎么搭建angular1項(xiàng)目3. mysql主從 - 請教下mysql 主動-被動模式的雙主配置 和 主從配置在應(yīng)用上有什么區(qū)別?4. python - django 里自定義的 login 方法,如何使用 login_required()5. 主從備份 - 跪求mysql 高可用主從方案6. java8中,邏輯與 & 符號用在接口類上代表什么意思7. python如何不改動文件的情況下修改文件的 修改日期8. angular.js - angular-ui-bootstrap 報(bào)錯無法使用?9. node.js - node_moduls太多了10. python - 關(guān)于ACK標(biāo)志位的TCP端口掃描的疑惑?
