前幾天,需要解碼iphone吐出的lte-rrc資料報,對於協議解碼,自然第一想到的是wireshark工具。但是wireshark的解碼預設都是需要從其支援的鏈路層開始解碼,否則是不能直接開啟lte-rrc資料報的,即使這個資料報存為了pcap檔案格式。這是因為從iphone拿到的lte資料報,是從l3 rrc層開始的,並不包含鏈路層mac、rlc等層。而實際上,這種情況是很多的,例如你有時只獲取了tcp之上http的資料報,沒有底層,又想利用wireshark進行內容的詳細解析。
那麼,有辦法不需要從**上改造wireshark而能達到此功能嗎?答案是肯定的。
我們知道,當wireshark讀取pcap格式檔案時,需要知道資料報的最底層協議型別,於是就從最底層協議開始依次往上層協議進行解碼。wireshark支援的鏈路層協議型別多達上百種(支援的定義在而具體資料是那種鏈路層協議,是在資料捕獲生成時就給定了,例如捕獲乙太網卡,就是以太型別,捕獲wlan無線空口資料,就是802.11型別,捕獲ss7 64k信令,就有mtp2等。但像lte-rrc這種層3協議,想交給wireshark解碼,儲存為pcap檔案時,鏈路層協議應該填多少呢?其實,pcap格式檔案的鏈路層協議值,空出了幾個給我們自己定義對映用的。他的範圍是147~162(定義為:dlt_user0 ~user15)。
例如,這有個lte-rrc bcch_dl_sch的pdu檔案lte_rrc.dat(怎麼把附件檔案貼上來呢?)。需要把它儲存為pcap檔案,在linux下執行:
od -ax -tx1 -v lte_rrc.dat | text2pcap -l 147 - lte_rrc.pcap
od命令用來用16進製制格式輸出資料,匯入給text2pcap命令,生成pcap檔案。-l 147引數,表示這個pcap資料的鏈路層協議值為147 (user0型別)。
但這時候,用wireshark開啟lte_rrc.pcap檔案,還是不認,因為你並沒有告訴wireshark 這個147的資料應該交給lte-rrc去解碼。所以,需要對wireshark作配置。
配置步驟如下:
開啟wireshark介面的edit--> preferences-->protocols--> dlt_user,介面如下:
確定後,就能看到lte-rrc的解碼了,如何這個rrc資料報,含有lte的nas層資料,相應也解碼出來了。
對與lte-rrc資料,在這裡存在2個問題:
一就是在增加user dlts table時,payload protocol協議應該怎麼填?具體參考我也沒有找到(有知道的請告我),目前,我是從**中檢視到的。在epan/dissector/packet-lte-rrc.c檔案中,註冊了一些pdu型別的解碼,類似於這樣:
new_register_dissector("lte-rrc.bcch.bch", dissect_bcch_bch_message_pdu, proto_lte_rrc);
new_register_dissector("lte-rrc.bcch.dl.sch", dissect_bcch_dl_sch_message_pdu, proto_lte_rrc);
new_register_dissector("lte-rrc.mcch", dissect_mcch_message_pdu, proto_lte_rrc);
new_register_dissector("lte-rrc.pcch", dissect_pcch_message_pdu, proto_lte_rrc);
new_register_dissector("lte-rrc.dl.ccch", dissect_dl_ccch_message_pdu, proto_lte_rrc);
new_register_dissector("lte-rrc.dl.dcch", dissect_dl_dcch_message_pdu, proto_lte_rrc);
new_register_dissector("lte-rrc.ul.ccch", dissect_ul_ccch_message_pdu, proto_lte_rrc);
new_register_dissector("lte-rrc.ul.dcch", dissect_ul_dcch_message_pdu, proto_lte_rrc);
new_register_dissector("lte-rrc.ue_cap_info", dissect_uecapabilityinformation_pdu, proto_lte_rrc);
new_register_dissector("lte-rrc.ue_eutra_cap", dissect_lte_rrc_ue_eutra_capability_pdu, proto_lte_rrc);
payload protocol裡面就應該根據資料是哪種pdu而填這裡面的對應某種。
二就是,從手機獲取的資料報有很多種pdu,有bcch_dl_sch的,有bcch _bch的,有dl_ccch、dl_dcch 。。。。等等。肯定不能都設定為147,乙個pcap檔案也不能設定成多種。怎麼辦?這就需要使用wireshark的命令列程式tshark了,因為命令列程式很方便跟指令碼、程式等對接,這個後續再寫。
上面只是以lte-rrc為例來如何配置讓wireshark支援解任意層協議的資料。
好了,讓wireshark接任意層協議的基本方法就是這樣。
tcpdump 抓包讓wireshark來分析
在linux下面用tcpdump 抓包非常方便,但是抓的包要提取出來進行分析,還是得用wireshark來過濾分析比較方便。下面先介紹一下 tcpdump 的使用 例 tcpdump host 172.16.29.40 and port 4600 x s 500 tcpdump採用命令列方式,它的命...
wireshark如何抓取WebSocket資料報
websocket目前在web端使用廣泛,可以使用websocket來傳輸資料,解決了web端無法跟伺服器維持高效的長鏈結的問題。什麼是websocket呢?websocket是一種瀏覽器與伺服器進行全雙工通訊的應用層協議。它基於 tcp 傳輸協議,並復用 http 的握手通道,可以在瀏覽器裡使用,...
wireshark如何抓取本機包
在進行通訊開發的過程中,我們往往會把本機既作為客戶端又作為伺服器端來除錯 使得本機自己和自己通訊。但是wireshark此時是無法抓取到資料報的,需要通過簡單的設定才可以。具體方法如下 方法一 1.以管理員身份執行cmd 2.route add 本機ip mask 255.255.255.255 閘...