cap数据包文件解析
来源:互联网 发布:如何让mac不休眠 编辑:程序博客网 时间:2024/06/05 17:55
windows下的wireshark和Linux下的tcpdump所抓的包为同样的CAP文件的格式,sniffer软件所抓的包文件扩展名也是.cap,但格式却不太一样。本文主要说明ethereal和tcpdump抓包产生的.cap文件的格式。
其实,要获得PCAP文件的格式,除了直接打开.cap文件来分析外,可以看WinPcap包或Linux下/usr/include下的pcap.h头文件。pcap.h文件中不但提供了cap文件解析的各种结构体,还提供了解析函数。
OK,先使用UE或WinHex打开.cap文件,开始分析其内容:
(1)cap文件头
前面24个字节是.cap文件的文件头。
头信息对应的结构体为:
struct pcap_file_header {
bpf_u_int32 magic;
u_short version_major;
u_short version_minor;
bpf_int32 thiszone; /* gmt to local correction */
bpf_u_int32 sigfigs; /* accuracy of timestamps */
bpf_u_int32 snaplen; /* max length saved portion of each pkt */
bpf_u_int32 linktype; /* data link type (LINKTYPE_*) */
};
cap文件中的linktype很重要,不同的网络环境下抓包,数据帧的帧头是不一样的。比如,在局域网内抓包,linktype为1 ( DLT_EN10MB, Ethernet (10Mb) ),以太网的帧头就是两个网卡物理地址;如果直接用ADSL拨号上线,则linktype为9 ( DLT_PPP, Point-to-point Protocol),数据帧头为PPP协议。
关于linktype支持的类型,可以参考pcap-bpf.h中定义的以DLT_开头的宏。
(2)每个帧的头信息
头信息后是顺序的每个数据包的信息,其中前16字节是抓包时间、捕获的包长度、真实的数据包长度,然后才是具体的数据帧的内容。
上图是单个数据包的cap文件,数据包长度是62字节(3E0x)。
以上一个数据段的内容。数据段的头对应的结构体为:
struct pcap_pkthdr {
struct timeval ts; /* time stamp */
bpf_u_int32 caplen; /* length of portion present */
bpf_u_int32 len; /* length this packet (off wire) */
};
ts为抓包的时间;
caplen和len我发现一般都是一样的。(什么情况下会不一样还没搞懂)
若是多个帧的cap文件,每个帧之前都会有16字节的帧头信息,之后才是具体的捕获到的数据帧内容,需要根据每个帧的长度来将不同的帧分开。
也就是说,若是单个帧的cap文件,前40字节是cap文件提供的信息,之后才是帧内容。
(3)帧内容
之后就是包的信息了。例子中的包信息是局域网中抓的,所以是以太网帧头,结构体如下:
struct EthernetPacket
{
char MacDst[6]; ///< 目的网卡物理地址
char MacSrc[6]; ///< 源网卡物理地址
unsigned short PacketType; ///< 包类型, ip或ARP等
};
PacketType=0x0008是IP包,PacketType=0x0608是ARP包。
之后的具体数据包信息根据协议进行解析即可。
- cap数据包文件解析
- cap数据包文件解析
- cap数据包文件解析
- cap数据包解析
- cap文件文件解析
- cap,pcap文件中的ipv4数据包转成ipv6数据包
- libpcap--GTPv2协议的cap文件解析
- http上传文件数据包解析
- python解析pcap文件中的http数据包
- pfring之学习——cap文件查看解析与步骤
- pcap/cap文件关联wireshark
- cap文件的格式说明
- Java Card CAP文件分析
- Java Card CAP文件分析
- 如何解析数据包
- 网络数据包的解析
- 解析ARP数据包
- 解析IP数据包
- nodejs 的fs 的所有用法
- sn序列号改变导致cts异常中断(案例)
- 解决第一次启动应用黑屏或者白屏的方法
- Android studio 编译很慢的终极解决方案
- iOS学习资料总结
- cap数据包文件解析
- 为什么display:line-block的a标签会加上文字之后会向下移动呢?
- 【jQuery】jQuery获取视窗、页面高度宽度
- 深入理解HTTP Session
- angular js 页面初始化 和 分页
- SUSE Linux openssh漏洞修复笔记
- 博客地址收集
- 71. Simplify Path
- include/linux/if_ppp.h:135: error: expected specifier-qualifier-list before 'aligned_u64'