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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 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

目录
打赏
0
0
0
0
7
分享
相关文章
Resume Matcher:增加面试机会!开源AI简历优化工具,一键解析简历和职位描述并优化
Resume Matcher 是一款开源AI简历优化工具,通过解析简历和职位描述,提取关键词并计算文本相似性,帮助求职者优化简历内容,提升通过自动化筛选系统(ATS)的概率,增加面试机会。
56 18
Resume Matcher:增加面试机会!开源AI简历优化工具,一键解析简历和职位描述并优化
深入解析图神经网络注意力机制:数学原理与可视化实现
本文深入解析了图神经网络(GNNs)中自注意力机制的内部运作原理,通过可视化和数学推导揭示其工作机制。文章采用“位置-转移图”概念框架,并使用NumPy实现代码示例,逐步拆解自注意力层的计算过程。文中详细展示了从节点特征矩阵、邻接矩阵到生成注意力权重的具体步骤,并通过四个类(GAL1至GAL4)模拟了整个计算流程。最终,结合实际PyTorch Geometric库中的代码,对比分析了核心逻辑,为理解GNN自注意力机制提供了清晰的学习路径。
140 7
深入解析图神经网络注意力机制:数学原理与可视化实现
JSON数据解析实战:从嵌套结构到结构化表格
在信息爆炸的时代,从杂乱数据中提取精准知识图谱是数据侦探的挑战。本文以Google Scholar为例,解析嵌套JSON数据,提取文献信息并转换为结构化表格,通过Graphviz制作技术关系图谱,揭示文献间的隐秘联系。代码涵盖代理IP、请求头设置、JSON解析及可视化,提供完整实战案例。
JSON数据解析实战:从嵌套结构到结构化表格
WebSocket 调试全攻略:核心解析、工具选择与对比!
WebSocket 是一种全双工、实时交互的网络通信协议,适用于即时通信、实时数据流、多人协作、IoT 等场景。调试 WebSocket 时,工具应具备握手管理、实时消息收发、自定义 Header、消息大小告警、分组管理、多连接支持和断线重现等功能。主流调试工具如 Postman、ApiPost 和 ApiFox 各有优劣:Postman 界面友好适合基础调试;ApiPost 支持高级功能如消息分组和自动重连;ApiFox 则强化了多连接支持。选择工具时需根据具体需求和团队熟悉度决定。
阿里云CDN:全球加速网络的实践创新与价值解析
在数字化浪潮下,用户体验成为企业竞争力的核心。阿里云CDN凭借技术创新与全球化布局,提供高效稳定的加速解决方案。其三层优化体系(智能调度、缓存策略、安全防护)确保低延迟和高命中率,覆盖2800+全球节点,支持电商、教育、游戏等行业,帮助企业节省带宽成本,提升加载速度和安全性。未来,阿里云CDN将继续引领内容分发的行业标准。
47 7
淘宝拍立淘按图搜索API接口系列的应用与数据解析
淘宝拍立淘按图搜索API接口是阿里巴巴旗下淘宝平台提供的一项基于图像识别技术的创新服务。以下是对该接口系列的应用与数据解析的详细分析
前后端分离开发:如何高效调试API?有工具 vs 无工具全解析
在前后端分离的开发模式中,API 调试的效率直接影响项目的质量和交付速度。通过本文的对比分析,我们可以看到无工具调试模式虽具备灵活性和代码复用能力,但在操作便利性和团队协作上稍显不足。而传统的外部调试工具带来了可视化、高效协作与扩展性,却可能存在工具切换带来的开发链路断层问题。Apipost-Hepler 融合了两者的优势,让开发者无需离开熟悉的 IDEA 环境,就能享受可视化调试工具的强大功能。
34 5
#WebSocket 调试全攻略:Postman、Apipost和Apifox核心解析、工具选择与对比!
WebSocket 是一种现代化的全双工通信协议,允许客户端和服务端通过持久连接实时双向传输数据。它适用于即时通讯、实时通知、金融行情、在线协作、物联网等场景。调试 WebSocket 时,工具应具备握手管理、实时消息收发、自定义 Header、消息大小监控、分组管理、多连接支持等功能。
31 1
阿里云网络安全体系解析:如何构建数字时代的"安全盾牌"
在数字经济时代,阿里云作为亚太地区最大的云服务提供商,构建了行业领先的网络安全体系。本文解析其网络安全架构的三大核心维度:基础架构安全、核心技术防护和安全管理体系。通过技术创新与体系化防御,阿里云为企业数字化转型提供坚实的安全屏障,确保数据安全与业务连续性。案例显示,某金融客户借助阿里云成功拦截3200万次攻击,降低运维成本40%,响应时间缩短至8分钟。未来,阿里云将继续推进自适应安全架构,助力企业提升核心竞争力。
如何高效爬取天猫商品数据?官方API与非官方接口全解析
本文介绍两种天猫商品数据爬取方案:官方API和非官方接口。官方API合法合规,适合企业长期使用,需申请企业资质;非官方接口适合快速验证需求,但需应对反爬机制。详细内容涵盖开发步骤、Python实现示例、反爬策略、数据解析与存储、注意事项及扩展应用场景。推荐工具链包括Playwright、aiohttp、lxml等。如需进一步帮助,请联系作者。

热门文章

最新文章

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等