如何让wireshark解码任意层的数据
来源:互联网 发布:淘宝购物车需求分析 编辑:程序博客网 时间:2024/05/17 08:13
前几天,需要解码iphone吐出的LTE-RRC数据包,对于协议解码,自然第一想到的是wireshark工具。但是wireshark的解码默认都是需要从其支持的链路层开始解码,否则是不能直接打开LTE-RRC数据包的,即使这个数据包存为了pcap文件格式。这是因为从iphone拿到的lte数据包,是从L3 RRC层开始的,并不包含链路层MAC、RLC等层。而实际上,这种情况是很多的,例如你有时只获取了TCP之上HTTP的数据包,没有底层,又想利用wireshark进行内容的详细解析。
那么,有办法不需要从代码上改造wireshark而能达到此功能吗?答案是肯定的。
我们知道,当wireshark读取pcap格式文件时,需要知道数据包的最底层协议类型,于是就从最底层协议开始依次往上层协议进行解码。wireshark支持的链路层协议类型多达上百种(支持的定义在http://www.tcpdump.org/linktypes.html)。而具体数据是那种链路层协议,是在数据捕获生成时就给定了,例如捕获以太网卡,就是以太类型,捕获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,界面如下:
点击Edit,出现编辑链路层数字对应协议的表。点击New,增加147对应得协议:
确定后,就能看到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接任意层协议的基本方法就是这样。
- 如何让wireshark解码任意层的数据
- Wireshark 如何截取特定网段的数据
- wireshark 如何识别应用层的协议是什么呢?
- Android Tcpdump抓包WireShark解码数据
- java解析任意层的json数据(递归解析)
- 如何framework层任意设置Android屏幕的旋转方向
- 如何framework层任意设置Android屏幕的旋转方向
- android 如何让自己的布局适配任意机型
- wireshark导出解码后的报文内容
- 关于wireshark包体的中文解码
- 如何让wireshark支持OpenFlow解析
- 可对任意类型数据进行编码的Base64编解码源码
- 任意层节点的折叠
- 如何让div层置顶
- Qt 中QtableView中如何得到任意一行的数据
- C++如何实现任意类型的数据交换
- 如何验证json数据中任意字段的值
- 如何让Wireshark支持(加密的HTTP2等)HTTPS报文分析
- 第三周作业-文件中百万的数据进行排序后再写入文件。(冒泡和归并分别实现)
- iis使用nginx实现网站负载
- Art of Multiprocessor Programming 答案 ch6
- 大牛一片片 少年你啥也不是
- Ubuntu 搭建个人博客WordPress环境
- 如何让wireshark解码任意层的数据
- JSTL标签之核心标签库
- 11个iOS面试问题
- 关于WinCE调用RegDeleteKey不能删除注册表项的问题
- Session服务器配置指南与使用经验
- 随便玩了玩unordered_map
- error和exception的区别,RuntimeException和非RuntimeException的区别
- PHP的RPC框架:Yar
- Java编程优化之旅(一)一般化方法