【python|scapy】sprintf輸出時raw_string轉string
問題描述
最近在有python的scapy模塊分析TCP報文,一直有一個關于轉義字符的問題困惑著我,查找的很多資料后仍然百思不得其解,請大神指教。請看代碼:
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()
結果為:
打印出的字符串中‘x11’、’x04’等等應該相當于一個字符,但是解釋器把它們當成了4個字符。所以四條報文中的tcp數據長度不是17而成了為53,52,46,52。查閱scapy源碼發現sprintf('%Raw.load%')函數實現提取tcp數據段,并將其轉化為字符串,但是轉化后的結果類似于raw_string,字符串中的‘x’失效了,被當做了2個字符。請問該怎么轉化,使得轉義字符‘x’生效,使得類似‘x11’、’x04’等等的字符被看做一個字符而不是4個?
問題解答
回答1:經過查閱資料,我發現要用個函數實現rawstring轉string,即可。
raw = raw.replace(’’’,’’)string = raw.decode(’string_escape’)
輸出的結果就正確了
相關文章:
1. javascript - js控制元素樣式的疑惑2. css3 - 網站放在本地和放在遠端服務器用 iPhone Safari 打開樣式不同3. javascript - node.js不同模塊之間如何傳值4. android - 哪位大神知道java后臺的api接口的對象傳到前端后輸入日期報錯,是什么情況?求大神指點5. mac連接阿里云docker集群,已經卡了2天了,求問?6. html - 哪些情況下float會失效?7. javascript - web 移動端瀏覽器 用js 能不做判斷當前手機安裝沒安裝app 如果安了就去打開 沒安就去下載哇?8. css3 - text-overflow為何會在li的子標簽a下失效9. 就一臺服務器,mysql數據庫想實現自動備份,如何設計?10. [前端求職必看]前端開發面試題與答案精選_擴展問題
