You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS Network Extension捕获数据包的协议类型与解析方法咨询

数据包协议判定与解析方法

1. 所属协议层级说明

你捕获的数据包属于网络层IPv4协议,在线工具解析失败是因为iOS Network Extension返回的IP数据包自带4字节的框架自定义前缀,不属于标准IP协议内容:
所有样本开头的00000002就是NE框架的标识前缀,剥离前4字节后剩下的内容就是标准IPv4报文。以第一个样本为例,剥离前缀后开头为4500,高4位4代表IPv4版本,低4位5代表IPv4首部长度为20字节,完全符合IPv4报文的格式规范。
进一步解析可以发现三个样本的IPv4首部协议字段值为11(十进制17),对应传输层UDP协议,UDP目的端口为0035(十进制53),因此三个包均为发往8.8.8.8的DNS查询请求,分别查询www.apple.com、www.icloud.com、apple.com的A记录。

2. 标准解析步骤

  • 第一步:剥离NE前缀,每个数据包丢弃前4字节,得到标准IP报文
  • 第二步:解析IPv4首部(参考RFC791规范):
    • 0~3位:IP版本号,4为IPv4、6为IPv6
    • 4~7位:首部长度,单位为4字节,实际长度为该值乘以4
    • 第9字节:传输层协议号,常见值1对应ICMP、6对应TCP、17对应UDP
    • 1215字节:源IP地址,1619字节:目的IP地址
  • 第三步:根据协议号解析传输层首部:
    本次样本为UDP协议,UDP首部固定8字节:
    • 01字节:源端口,23字节:目的端口
    • 45字节:UDP报文总长度,67字节:校验和
  • 第四步:解析传输层载荷,本次样本目的端口为53,按照DNS协议(RFC1035)结构解析即可获取查询的域名、记录类型等内容。

3. C/C++实现解析的参考思路

直接定义对应协议的结构体,按偏移读取字段即可,注意网络字节序转主机字节序需要使用ntohs/ntohl系统函数:

// IPv4首部结构体定义
struct ipv4_header {
    uint8_t  version_ihl;    // 高4位版本,低4位首部长度
    uint8_t  tos;            // 服务类型
    uint16_t total_len;      // IP报文总长度
    uint16_t id;             // 标识
    uint16_t frag_off;       // 分片偏移
    uint8_t  ttl;            // 生存时间
    uint8_t  protocol;       // 传输层协议号
    uint16_t checksum;       // 首部校验和
    uint32_t saddr;          // 源IP地址
    uint32_t daddr;          // 目的IP地址
};

// UDP首部结构体定义
struct udp_header {
    uint16_t sport;          // 源端口
    uint16_t dport;          // 目的端口
    uint16_t len;            // UDP报文长度
    uint16_t checksum;       // 校验和
};

解析时先将数据包指针偏移4字节跳过NE前缀,再强转为对应结构体指针即可读取字段。

内容的提问来源于stack exchange,提问作者Top-Master

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 08:54:03