网络抓包数据文件(.pcap/.cap)解析工具(Java实现)

简介: pcap/.cap文件是常用的数据报存储格式文件,数据按照特定格式存储,普通编辑器无法正常打开该类型文件,使用Ultra Edit编辑器能够以16进制的格式查看数据,无法直观查看数据重要信息。需要特定的解析工具软件读取查看如WiresharkPortable或Microsoft Network Monitor等

前言

pcap/.cap文件是常用的数据报存储格式文件,数据按照特定格式存储,普通编辑器无法正常打开该类型文件,使用Ultra Edit编辑器能够以16进制的格式查看数据,无法直观查看数据重要信息。需要特定的解析工具软件读取查看如WiresharkPortable或Microsoft Network Monitor等。


问题


然而一些开发任务需要数据文件(.pcap/.cap)某项信息进行后续处理,无法使用软件获取信息输入到程序中,对开发任务带来一些困难。


解决


引入pcap4j库,该库通过网络接口捕获数据包并将它们转换为 Java 对象。可以通过从数据包转换而来的 Java 对象来获取/设置数据包头的每个字段。您还可以从头开始制作数据包对象。pcap4j还具有更强大的功能,有兴趣可关注微信公众号:Java烂笔头,回复:pcap4j-1,查看完整源码及说明。


示例代码

maven 依赖

<dependencies>
    <dependency>
      <groupId>org.pcap4j</groupId>
      <artifactId>pcap4j-core</artifactId>
      <version>1.8.2</version>
    </dependency>
    <dependency>
      <groupId>org.pcap4j</groupId>
      <artifactId>pcap4j-packetfactory-static</artifactId>
      <version>1.8.2</version>
    </dependency>
  </dependencies>
package org.pcap4j.sample;
import java.io.EOFException;
import java.util.concurrent.TimeoutException;
import org.pcap4j.core.NotOpenException;
import org.pcap4j.core.PcapHandle;
import org.pcap4j.core.PcapHandle.TimestampPrecision;
import org.pcap4j.core.PcapNativeException;
import org.pcap4j.core.Pcaps;
import org.pcap4j.packet.Packet;
@SuppressWarnings("javadoc")
public class ReadPacketFile {
  private static final int COUNT = 5;
  private static final String PCAP_FILE_KEY = ReadPacketFile.class.getName() + ".pcapFile";
  private static final String PCAP_FILE =
      System.getProperty(PCAP_FILE_KEY, "src/main/resources/echoAndEchoReply.pcap");
  private ReadPacketFile() {}
  public static void main(String[] args) throws PcapNativeException, NotOpenException {
    PcapHandle handle;
    try {
      handle = Pcaps.openOffline(PCAP_FILE, TimestampPrecision.NANO);
    } catch (PcapNativeException e) {
      handle = Pcaps.openOffline(PCAP_FILE);
    }
    for (int i = 0; i < COUNT; i++) {
      try {
        Packet packet = handle.getNextPacketEx();
        System.out.println(handle.getTimestamp());
        System.out.println(packet);
      } catch (TimeoutException e) {
      } catch (EOFException e) {
        System.out.println("EOF");
        break;
      }
    }
    handle.close();
  }
}
2012-09-12 13:27:27.609228
[Ethernet Header (14 bytes)]
  Destination address: 00:01:8e:f9:a7:60
  Source address: 04:7d:7b:4c:2f:0a
  Type: 0x0800 (IPv4)
[IPv4 Header (20 bytes)]
  Version: 4 (IPv4)
  IHL: 5 (20 [bytes])
  TOS: [precedence: 0 (Routine)] [tos: 0 (Default)] [mbz: 0]
  Total length: 60 [bytes]
  Identification: 18814
  Flags: (Reserved, Don't Fragment, More Fragment) = (false, false, false)
  Fragment offset: 0 (0 [bytes])
  TTL: 128
  Protocol: 1 (ICMPv4)
  Header checksum: 0x0000
  Source address: /192.168.2.101
  Destination address: /192.168.2.1
[ICMPv4 Common Header (4 bytes)]
  Type: 8 (Echo)
  Code: 0 (No Code)
  Checksum: 0x4c5b
[ICMPv4 Echo Header (4 bytes)]
  Identifier: 256
  SequenceNumber: 1
[data (32 bytes)]
  Hex stream: 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69
2012-09-12 13:27:27.609965
[Ethernet Header (14 bytes)]
  Destination address: 04:7d:7b:4c:2f:0a
  Source address: 00:01:8e:f9:a7:60
  Type: 0x0800 (IPv4)
[IPv4 Header (20 bytes)]
  Version: 4 (IPv4)
  IHL: 5 (20 [bytes])
  TOS: [precedence: 0 (Routine)] [tos: 0 (Default)] [mbz: 0]
  Total length: 60 [bytes]
  Identification: 30935
  Flags: (Reserved, Don't Fragment, More Fragment) = (false, false, false)
  Fragment offset: 0 (0 [bytes])
  TTL: 64
  Protocol: 1 (ICMPv4)
  Header checksum: 0x7c33
  Source address: /192.168.2.1
  Destination address: /192.168.2.101
[ICMPv4 Common Header (4 bytes)]
  Type: 0 (Echo Reply)
  Code: 0 (No Code)
  Checksum: 0x545b
[ICMPv4 Echo Reply Header (4 bytes)]
  Identifier: 256
  SequenceNumber: 1
[data (32 bytes)]
  Hex stream: 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69
2012-09-12 13:27:28.611932
[Ethernet Header (14 bytes)]
  Destination address: 00:01:8e:f9:a7:60
  Source address: 04:7d:7b:4c:2f:0a
  Type: 0x0800 (IPv4)
[IPv4 Header (20 bytes)]
  Version: 4 (IPv4)
  IHL: 5 (20 [bytes])
  TOS: [precedence: 0 (Routine)] [tos: 0 (Default)] [mbz: 0]
  Total length: 60 [bytes]
  Identification: 18815
  Flags: (Reserved, Don't Fragment, More Fragment) = (false, false, false)
  Fragment offset: 0 (0 [bytes])
  TTL: 128
  Protocol: 1 (ICMPv4)
  Header checksum: 0x0000
  Source address: /192.168.2.101
  Destination address: /192.168.2.1
[ICMPv4 Common Header (4 bytes)]
  Type: 8 (Echo)
  Code: 0 (No Code)
  Checksum: 0x4c5a
[ICMPv4 Echo Header (4 bytes)]
  Identifier: 256
  SequenceNumber: 2
[data (32 bytes)]
  Hex stream: 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69
2012-09-12 13:27:28.61251
[Ethernet Header (14 bytes)]
  Destination address: 04:7d:7b:4c:2f:0a
  Source address: 00:01:8e:f9:a7:60
  Type: 0x0800 (IPv4)
[IPv4 Header (20 bytes)]
  Version: 4 (IPv4)
  IHL: 5 (20 [bytes])
  TOS: [precedence: 0 (Routine)] [tos: 0 (Default)] [mbz: 0]
  Total length: 60 [bytes]
  Identification: 30936
  Flags: (Reserved, Don't Fragment, More Fragment) = (false, false, false)
  Fragment offset: 0 (0 [bytes])
  TTL: 64
  Protocol: 1 (ICMPv4)
  Header checksum: 0x7c32
  Source address: /192.168.2.1
  Destination address: /192.168.2.101
[ICMPv4 Common Header (4 bytes)]
  Type: 0 (Echo Reply)
  Code: 0 (No Code)
  Checksum: 0x545a
[ICMPv4 Echo Reply Header (4 bytes)]
  Identifier: 256
  SequenceNumber: 2
[data (32 bytes)]
  Hex stream: 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69
2012-09-12 13:27:29.611909
[Ethernet Header (14 bytes)]
  Destination address: 00:01:8e:f9:a7:60
  Source address: 04:7d:7b:4c:2f:0a
  Type: 0x0800 (IPv4)
[IPv4 Header (20 bytes)]
  Version: 4 (IPv4)
  IHL: 5 (20 [bytes])
  TOS: [precedence: 0 (Routine)] [tos: 0 (Default)] [mbz: 0]
  Total length: 60 [bytes]
  Identification: 18816
  Flags: (Reserved, Don't Fragment, More Fragment) = (false, false, false)
  Fragment offset: 0 (0 [bytes])
  TTL: 128
  Protocol: 1 (ICMPv4)
  Header checksum: 0x0000
  Source address: /192.168.2.101
  Destination address: /192.168.2.1
[ICMPv4 Common Header (4 bytes)]
  Type: 8 (Echo)
  Code: 0 (No Code)
  Checksum: 0x4c59
[ICMPv4 Echo Header (4 bytes)]
  Identifier: 256
  SequenceNumber: 3
[data (32 bytes)]
  Hex stream: 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67 68 69

完整源码


示例源码关注微信公众号:Java烂笔头,回复:pcap4j


应用场景

需求:当数据块比较大时,数据块会被压缩,当需要通过抓包来查看数据包内容时,无法直接通过软件查看。给实际工程问题排查带来不便,需要开发一个工具,判断数据是否被压缩,如果压缩进行解压。

              功能:解析报文,报文协议如下:提取出压缩的报文,并解压其中的数据,输出解压后的二进制数据。

               输入:抓取的设备的报文文件。

               输出:将解压的二进制数据输出。

                       格式:

                               时间:

                               源ip:

                               宿ip:

                               数据:


思路:通过pcap4j解析库可以直接读取每条数据的时间、源地址、宿地址、十六进制数据,其次通过Microsoft Network Monitor软件查看报文数据,找出表示是否压缩的十六进制数据位,找出每条数据的表示压缩位的位置规律,将该位转为二进制的最后一位表示是否压缩,1表示压缩,0表示未压缩。然后将压缩的数据转为二进制输出即可。

image.png


image.pngimage.png

相关文章
|
2月前
|
人工智能 Cloud Native Java
2025 年 Java 应届生斩获高薪需掌握的技术实操指南与实战要点解析
本指南为2025年Java应届生打造,涵盖JVM调优、响应式编程、云原生、微服务、实时计算与AI部署等前沿技术,结合电商、数据处理等真实场景,提供可落地的技术实操方案,助力掌握高薪开发技能。
143 2
|
1月前
|
缓存 安全 Java
Java并发性能优化|读写锁与互斥锁解析
本文深入解析Java中两种核心锁机制——互斥锁与读写锁,通过概念对比、代码示例及性能测试,揭示其适用场景。互斥锁适用于写多或强一致性场景,读写锁则在读多写少时显著提升并发性能。结合锁降级、公平模式等高级特性,助你编写高效稳定的并发程序。
98 0
|
2月前
|
安全 算法 Java
Java 多线程:线程安全与同步控制的深度解析
本文介绍了 Java 多线程开发的关键技术,涵盖线程的创建与启动、线程安全问题及其解决方案,包括 synchronized 关键字、原子类和线程间通信机制。通过示例代码讲解了多线程编程中的常见问题与优化方法,帮助开发者提升程序性能与稳定性。
119 0
|
1月前
|
安全 Oracle Java
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
153 0
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
|
27天前
|
算法 Java 测试技术
零基础学 Java: 从语法入门到企业级项目实战的详细学习路线解析
本文为零基础学习者提供完整的Java学习路线,涵盖语法基础、面向对象编程、数据结构与算法、多线程、JVM原理、Spring框架、Spring Boot及项目实战,助你从入门到进阶,系统掌握Java编程技能,提升实战开发能力。
75 0
|
2月前
|
存储 Java Linux
操作系统层面视角下 Java IO 的演进路径及核心技术变革解析
本文从操作系统层面深入解析Java IO的演进历程,涵盖BIO、NIO、多路复用器及Netty等核心技术。分析各阶段IO模型的原理、优缺点及系统调用机制,探讨Java如何通过底层优化提升并发性能与数据处理效率,全面呈现IO技术的变革路径与发展趋势。
52 1
|
2月前
|
并行计算 Java API
Java List 集合结合 Java 17 新特性与现代开发实践的深度解析及实战指南 Java List 集合
本文深入解析Java 17中List集合的现代用法,结合函数式编程、Stream API、密封类、模式匹配等新特性,通过实操案例讲解数据处理、并行计算、响应式编程等场景下的高级应用,帮助开发者提升集合操作效率与代码质量。
125 1
|
2月前
|
存储 Java 程序员
Java 基础知识点全面梳理包含核心要点及难点解析 Java 基础知识点
本文档系统梳理了Java基础知识点,涵盖核心特性、语法基础、面向对象编程、数组字符串、集合框架、异常处理及应用实例,帮助初学者全面掌握Java入门知识,提升编程实践能力。附示例代码下载链接。
109 1
|
2月前
|
安全 Java 测试技术
Java 大学期末实操项目在线图书管理系统开发实例及关键技术解析实操项目
本项目基于Spring Boot 3.0与Java 17,实现在线图书管理系统,涵盖CRUD操作、RESTful API、安全认证及单元测试,助力学生掌握现代Java开发核心技能。
101 1
|
2月前
|
监控 数据可视化 Java
VMware Aria Operations for Networks 6.14 - 网络和应用监控工具
VMware Aria Operations for Networks 6.14 - 网络和应用监控工具
70 0
VMware Aria Operations for Networks 6.14 - 网络和应用监控工具

热门文章

最新文章

推荐镜像

更多
  • DNS