libtshark
- 实时在线报文分析
- 可扩展性能
- Wireshark + Pcap4J
libtshark
是基于Wireshark
和Pcap4J
的实时在线报文分析库,用于在线报文的实时分析或离线报文的重放分析,基于Wireshark
实现,支持两千多种协议的详细解析。
解析结果和Wireshark
完全相同,可以方便地将解析数据导入到自己的程序中进行进一步的流量分析。
Demo
- 配置运行环境
libtshark
依赖Wireshark
的tshark
,所以首先要下载安装Wireshark.- 将
resource
文件夹下的mywireshark_plugin.lua
脚本拷贝到Wireshark
的插件目录/wireshark/plugins
. - 配置环境变量,将
Wireshark
目录添加到path
中,终端输入tshark
可以正常运行即可。
-
配置
libtshark
运行文件 参考config/tsharkprocess.json
定制libtshark
报文分析行为.具体参数含义见下文,也可以参考tshark官网 -
运行
// 代码会从tsharkprocess.json中加载相应的配置初始化tshark
public class Main {
public static void main(String[] args){
PacketAnalyzeEngine packetAnalyzeEngine = new PacketAnalyzeEngine();
packetAnalyzeEngine.setDataCallback(new PacketAnalyzeEngine.DataCallback() {
@Override
public void callback(int processId, String json) {
System.out.println(json);
}
});
packetAnalyzeEngine.start();
}
}
配置文件
修改 tsharkprocess.json
文件,改变PacketAnalyzeEngine
行为。
{
"args": [
{
"protocol": ["s7comm"], // 分析的协议名称,对应wireshark的display filter
"filterFields": [
"s7comm.param.userdata.funcgroup", // 需要输出的字段名1
"s7comm.param.func" // 需要输出的字段名2
],
"showConsole": false, // 是否将当前协议的解析结果输出到终端,
"clazz": [ //解析结果会转换为class实例对象输出到pipeline进行后续处理,注意字段必须按照一定的格式使用,具体查看示例,如果没有指定,会默认输出JSONObject
"clazzName"
]
}
],
"undefined": true, // 非指定协议解析
"iFace": "\\Device\\NPF_{85B3D44A-D5EF-4256-97A3-2002C1D08DB3}", // 解析网卡
"restartProcess": 10000,
"dumpcap": {
"iFace" : "\\Device\\NPF_{235EDB77-6B88-41E1-8C1E-29DB35754E3D}", // 抓包网卡
"tmpFile" : "C:\\Users\\zjucsc\\Desktop\\dumpcap_tmp\\tmp", // 临时文件目录
"fileSize" : 100000
}
}