pcap包结构&SNI字段的解析

pcap文件格式是常用的数据报存储格式,包括wireshark在内的主流抓包软件都可以生成这种格式的数据包。 文件格式: Pcap文件头(24字节)+数据包头(wireshark增加的)+数据包(网络中抓取的)+……1.pcap文件头结构各字段说明:Magic:4B:0×1A 2B 3C 4D:用来识别文件自己和字节顺序。0xa1b2c3d4用来表示按照...
摘要由CSDN通过智能技术生成

    pcap文件格式是常用的数据报存储格式,包括wireshark在内的主流抓包软件都可以生成这种格式的数据包。

    文件格式:

    Pcap文件头(24字节)+数据包头(wireshark增加的)+数据包(网络中抓取的)+……

1.pcap文件头结构

各字段说明:

Magic:4B:0×1A 2B 3C 4D:用来识别文件自己和字节顺序。0xa1b2c3d4用来表示按照原来的顺序读取,0xd4c3b2a1表示下面的字节都要交换顺序读取。一般,我们使用0xa1b2c3d4

Major:2B,0×02 00:当前文件主要的版本号

Minor:2B,0×04 00当前文件次要的版本号

ThisZone:4B 时区。GMT和本地时间的相差,用秒来表示。如果本地的时区是GMT,那么这个值就设置为0.这个值一般也设置为0 SigFigs:4B时间戳的精度;全零

SnapLen:4B最大的存储长度(该值设置所抓获的数据包的最大长度,如果所有数据包都要抓获,将该值设置为65535; 例如:想获取数据包的前64字节,可将该值设置为64)

LinkType:4B链路类型

结构体定义:

//pacp文件头结构体
struct pcap_file_header 
{
	u_int32_t magic;
	/* 0xa1b2c3d4 */
	u_int16_t version_major;
	/* magjor Version 2 */
	u_int16_t version_minor;
	/* magjor Version 4 */
	int32_t thiszone;
	/* gmt to local correction */
	u_int32_t sigfigs;
	/* accuracy of timestamps */
	u_int32_t snaplen;
	/* max length saved portion of each pkt */
	u_int32_t linktype;
	/* data link type (LINKTYPE_*) */
};

2.数据包头结构

各字段说明:

Timestamp:时间戳高位,精确到seconds(值是自从January 1, 1970 00:00:00 GMT以来的秒数来记)

Timestamp:时间戳低位,精确到microseconds (数据包被捕获时候的微秒(microseconds)数,是自ts-sec的偏移量)

Caplen:当前数据区的长度,即抓取到的数据帧长度,由此可以得到下一个数据帧的位置。

Len:离线数据长度:网络中实际数据帧的长度,一般不大于caplen,多数情况下和Caplen数值相等。

(例如,实际上有一个包长度是1500 bytes(Len=1500),但是因为在Global Header的snaplen=1300有限制,所以只能抓取这个包的前1300个字节,这个时候,Caplen = 1300 )

 

Wireshark中的实际样子:

结构体定义:

//时间戳
struct time_val 
{
	int tv_sec;
	/* seconds 含义同 time_t 对象的值 */
	int tv_usec;
	/* and microseconds */
}
;
//pcap数据包头结构体
struct pcap_pkthdr 
{
	struct time_val ts;
	/* time stamp */
	u_int32_t caplen;
	/* length of portion present */
	u_int32_t len;
	/* length this packet (off wire) */
};

3.数据包

即 Packet(通常就是链路层的数据帧)具体内容,长度就是Caplen,这个长度的后面,就是当前PCAP文件中存放的下一个Packet数据包,也就 是说:PCAP文件里面并没有规定捕获的Packet数据包之间有什么间隔字符串,下一组数据在文件中的起始位置。我们需要靠第一个Packet包确定,以TLS数据包的client hello消息为例来分析结构。

数据帧头,即数据链路层的头部

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我不是很了解java如何解析pcap,但是我可以给你一些建议:1.可以使用JavaScript括Node.js和JSNAP来解析pcap;2.也可以使用Java编写的开源库,比如Pcap4J;3.还可以使用第三方工具,比如Wireshark。 ### 回答2: PCAP是一种网络数据捕获文件格式,通常用于网络分析和数据嗅探。使用Java解析PCAP可以帮助我们分析和研究网络通信。 首先,我们需要使用Java的网络库(如JpcapPcap4J)来读取和解析PCAP文件。这些库提供了封装和处理PCAP文件的类和方法。 步骤如下: 1. 首先,我们需要导入相应的库和类文件。 import java.io.*; import jpcap.*; import jpcap.packet.*; 2. 创建一个JpcapCaptor对象,用于打开和读取PCAP文件。 JpcapCaptor captor = JpcapCaptor.openFile("path/to/your/pcap/file"); 3. 开始循环读取和解析数据,直到文件结束。 while (true) { Packet packet = captor.getPacket(); // 如果数据为空,则代表已经读取完整个PCAP文件 if (packet == null) { break; } // 解析和处理数据 // 可以提取源IP地址、目标IP地址、协议类型等信息 // 可以根据需要进一步解析数据的报文、负载等部分 String sourceIp = packet.src_ip.toString(); String destinationIp = packet.dst_ip.toString(); String protocol = packet.getClass().getSimpleName(); // 打印解析结果 System.out.println("源IP地址:" + sourceIp); System.out.println("目标IP地址:" + destinationIp); System.out.println("协议类型:" + protocol); } 4. 关闭JpcapCaptor对象,释放资源。 captor.close(); 通过上述步骤,我们可以使用Java解析一个PCAP。在解析过程中,可以根据需求提取和处理数据的各种信息,从而进行分析和研究。 ### 回答3: PCAP(Packet Capture)是一种网络数据捕获和存储格式,可以记录网络流量和数据。在Java中解析PCAP可以使用开源的库,比如Jpcap。 首先,需要添加Jpcap库的依赖到项目中。可以在项目的构建文件(如pom.xml)中添加对应的依赖。 接着,在Java代码中导入Jpcap的相关类和方法。通常,我们需要使用JpcapCaptor类来捕获并解析PCAP。 示例代码如下: ```java import jpcap.JpcapCaptor; import jpcap.PacketReceiver; import jpcap.packet.Packet; public class PcapParser { public static void main(String[] args) throws Exception { // 打开网络设备进行抓 JpcapCaptor captor = JpcapCaptor.openDevice(); // 需要选择特定的网络设备 // 设置接收器来处理抓到的每个 captor.loopPacket(-1, new PacketReceiver() { @Override public void receivePacket(Packet packet) { // 解析和处理每个的逻辑在这里实现 System.out.println(packet); // 打印每个的详细信息 } }); // 关闭抓器 captor.close(); } } ``` 在上述代码中,我们首先打开一个网络设备,然后使用`loopPacket`方法开始捕获和解析。我们可以在`receivePacket`方法中处理每个捕获到的,例如获取源IP地址、目标IP地址等信息,或者对的内容进行特定的处理。 需要注意的是,上述示例代码仅展示了基本的PCAP解析和处理流程。根据具体的需求,可能需要进一步学习和掌握Jpcap库的使用,以便实现更复杂的功能和操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值