本文主要分为以下几点:
1.什么是pcap包?
2.pcap包内容如何查看?
3.在java程序中借助WireShark进行解析,在后台查看
1.什么是pcap包
什么是pcap抓包
PCAP是一个数据包抓取库, 很多软件都是用它来作为数据包抓取工具的。 WireShark也是用PCAP库来抓取数据包的。PCAP抓取出来的数据包并不是原始的网络字节流,而是对其进行从新组装,形成一种新的数据格式。
2.pcap包如何打开查看
在window系统上直接用Wireshark就可以进行pcap包的查看以及在线进行pcap的抓取。
默认打开显示的时间是以微秒形式进行显示,查看起来不是很直观,所以需要对时间一列进行格式化。
通过
frame.time>="2017-10-20 11:16:47.053237" and frame.time<="2017-10-20 11:16:48.168048"进行时间过滤过滤源ip、目的ip。过滤目标地址
ip.dst==192.168.101.111;查找源地址为ip.src==192.168.101.111;端口过滤。tcp.port==8080,把源端口和目的端口为8080的都过滤出来。tcp.dstport==8080只过滤目的端口为8080的,tcp.srcport==8080只过滤源端口为80的包[更多过滤规则]
3.在java程序中借助WireShark进行解析,在后台查看
由于公司里面的测试环境是window环境,所以我采用的是在Java中使用Runtime和Process类运行WireShark程序进行pcap的解析。
linux环境运行WireShark
cmdPacp = "tshark -r localFilePath -T fields -o gui.column.format:\"No.,%m,Time,%Yt,Source,%s,Destination,%d,Protocol,%p,Info,%i\" -e _ws.col.No. -e _ws.col.Time -e _ws.col.Source -e _ws.col.Destination -e _ws.col.Protocol -e _ws.col.Info -E header=y -E separator=, -E quote=d -E occurrence=f ";
process = Runtime.getRuntime().exec("cmd /c " + cmdPacp, null, new File(Constant.getPcapDiskLoc()));
注释
-r 指定要分析的.pcap文件
-T fields 说明要对.pcap文件中的fields进行提取
-T:输出到命令行界面
gui.column.format:对待打印的字段进行格式化
-T,-e: 指的是打印No、Time、Source、Destination、Protocol、Info;
-E: 当-T字段指定时,设置输出选项,header=y意思是头部要打印;
header=y :打印列表的字段名称使用
separator= :各个字段之间的分隔符
quote=d : d使用双引号,s的单引号,n没有引号(默认)
occurrence=f :择使用哪个发生多次出现的字段。如果f将使用第一次出现,如果l最后出现将使用如果出现将使用所有(这是默认的)
localFilePath 代表pcap包文件位置
new File(Constant.getPcapDiskLoc())代表WireShark在pc中的目录位置
cmdPacp = "tshark -r " + localFilePath
+ " -T fields -o gui.column.format:\"No.,%m,Time,%Yt,Source,%s,Destination,%d,Protocol,%p,Info,%i\" -e _ws.col.No. -e _ws.col.Time -e _ws.col.Source -e _ws.col.Destination -e _ws.col.Protocol -e _ws.col.Info -E header=y -E separator=, -E quote=d -E occurrence=f ";
stopWatch.start();
process = Runtime.getRuntime().exec("cmd /c " + cmdPacp, null, new File(Constant.getPcapDiskLoc()));
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream(), "utf-8"));
while ((s = br.readLine()) != null) {
pcap = createPcap(s);
//根据解析时间和样例指标时间归类
pcapToQuotaType(testingResultTime, pcap);
if (pcap != null) {
pcap.setTimetamp(timetamp);
save(pcap);
}
// System.out.println(s);
}
process.waitFor();
stopWatch.stop();
private Pcap createPcap(String string) {
String[] pacpInfos = string.split(",");
if (StringUtil.isEmpty(StringUtil.removeQuotes(pacpInfos[2]))
|| StringUtil.isEmpty(StringUtil.removeQuotes(pacpInfos[3])))
return null;
if (string.contains("_ws"))
return null;
Pcap pcap = new Pcap();
pcap.setNoIndex(Integer.parseInt(StringUtil.removeQuotes(pacpInfos[0])));
pcap.setTime(StringUtil.removeQuotes(pacpInfos[1]));
pcap.setSource_address(StringUtil.removeQuotes(pacpInfos[2]));
pcap.setTarget_address(StringUtil.removeQuotes(pacpInfos[3]));
pcap.setAgreement(StringUtil.removeQuotes(pacpInfos[4]));
pcap.setInfos(StringUtil.removeQuotes(pacpInfos[5]));
return pcap;
}
/**
* 获取pcap解析结果细节中的frame 编号
* @param targertStr
* @return
*/
private String extractNoIndex(String targertStr){
String firstLineStr = targertStr.substring(0,30);
String freameStr = firstLineStr.split(":")[0];
String templeteStr = "Frame ";
return freameStr.substring(templeteStr.length(), freameStr.length());
}
后台效果如下图显示:
1.列表展示效果图
2.列表中某条的详细解析细节信息

本文介绍了pcap包的概念,如何使用Wireshark查看pcap包,并详细说明了如何在Java程序中借助WireShark库进行后台pcap包的解析和查看。
593

被折叠的 条评论
为什么被折叠?



