1. 抓包

捕获从网络适配器提取包,并将其保存到硬盘上.

访问底层网络适配器需要提升的权限,因此和底层网卡抓包的功能被封装在dumpcap中,这是Wireshark中唯一需要特权执行的程序,代码的其他部分(包括解析器,用户界面等等)只需要普通用户权限。

为了隐藏所有底层的机器依赖性,使用了libpcap/WinPcap库.这此库提供了从多种不同的网络接口 类型(Ethernet, Token Ring,...)上捕获包的通用接口.

2. 文件格式

Wireshark可以读写libpcap格式的捕获文件,这是它的默认文件格式,被用于其他很多网络捕获工具, 如tcpdump.另外,Wireshark还可以读写其他网络捕获工具使用的多种不同的文件格式.wiretap库, 和Wireshark一起开发,提供了读写所有这些文件格式的通用接口.如果你需要添加其他的捕获文件格式,应从此处着手.

pcap文件的封装格式如下图所示。magic number的值对于以主机字节序写入的文件来说是0x1a2b3c4d。

两个重要struct见/wiretap/libpcap.h。

/* "libpcap" file header (minus magic number). */
struct pcap_hdr {
unsigned short version_major;
unsigned short version_minor;
int thiszone;
unsigned int sigfigs;
unsigned int snaplen;
unsigned int network;
}; /* "libpcap" record header. */
struct pcaprec_hdr {
unsigned int ts_sec;
unsigned int ts_usec;
unsigned int incl_len;
unsigned int orig_len;
};

3. 报文解析

当Wireshark从文件中载入包时,会解析每一个包.Wireshark尝试探测包类型并尽可能地取得更多的包信息.然而此时,只需要显示在报文列表窗格(packet list pane)的信息.

当用户在包列表窗格中选择特定的包时,它会被重新解析一次.此时,Wireshark尝试取得每条信息并显示在报文细节窗格(packet detail pane)中.

Wireshark支持多种文件格式,这是由wiretap目录下代码来实现的。简单来说,在fire_access.c里有一个open_info结构体数组open_info_base,它的一部分如下:

static struct open_info open_info_base[] = {
{ "Pcap", OPEN_INFO_MAGIC, libpcap_open, "pcap", NULL, NULL },
{ "PcapNG", OPEN_INFO_MAGIC, pcapng_open, "pcapng", NULL, NULL },
{ "NgSniffer", OPEN_INFO_MAGIC, ngsniffer_open, NULL, NULL, NULL },
{ "Snoop", OPEN_INFO_MAGIC, snoop_open, NULL, NULL, NULL },
{ "IP Trace", OPEN_INFO_MAGIC, iptrace_open, NULL, NULL, NULL },
{ "Netmon", OPEN_INFO_MAGIC, netmon_open, NULL, NULL, NULL },
{ "Netxray", OPEN_INFO_MAGIC, netxray_open, NULL, NULL, NULL },
{ "Radcom", OPEN_INFO_MAGIC, radcom_open, NULL, NULL, NULL },
{ "Nettl", OPEN_INFO_MAGIC, nettl_open, NULL, NULL, NULL },
{ "Visual", OPEN_INFO_MAGIC, visual_open, NULL, NULL, NULL },
{ "5 Views", OPEN_INFO_MAGIC, _5views_open, NULL, NULL, NULL },
{ "Network Instruments", OPEN_INFO_MAGIC, network_instruments_open, NULL, NULL, NULL },
{ "Peek Tagged", OPEN_INFO_MAGIC, peektagged_open, NULL, NULL, NULL },
{ "DBS Etherwatch", OPEN_INFO_MAGIC, dbs_etherwatch_open, NULL, NULL, NULL },
{ "K12", OPEN_INFO_MAGIC, k12_open, NULL, NULL, NULL },
{ "Catapult DCT 2000", OPEN_INFO_MAGIC, catapult_dct2000_open, NULL, NULL, NULL },
{ "Aethra", OPEN_INFO_MAGIC, aethra_open, NULL, NULL, NULL },
{ "BTSNOOP", OPEN_INFO_MAGIC, btsnoop_open, "log", NULL, NULL },
{ "EYESDN", OPEN_INFO_MAGIC, eyesdn_open, NULL, NULL, NULL },
{ "TNEF", OPEN_INFO_MAGIC, tnef_open, NULL, NULL, NULL },
{ "MIME Files with Magic Bytes", OPEN_INFO_MAGIC, mime_file_open, NULL, NULL, NULL },
{ "Lanalyzer", OPEN_INFO_HEURISTIC, lanalyzer_open, "tr1", NULL, NULL },
...
};

在file_access.c中的init_open_routines函数中,它被赋值给全局变量open_routines。

在file_access.c中的wtap_open_offline函数中,会遍历此数组,直到其中的打开函数可以打开给定的文件。

switch ((*open_routines[i].open_routine)(wth, err, err_info)) {
case -:
/* I/O error - give up */
wtap_close(wth);
return NULL; case :
/* No I/O error, but not that type of file */
break; case :
/* We found the file type */
goto success;
}

4. 参考

Wireshark开发指南第6章"How wireshark works"

【wireshark】抓包和文件格式支持的更多相关文章

  1. Wireshark抓包分析/TCP/Http/Https及代理IP的识别

    前言 坦白讲,没想好怎样的开头.辗转三年过去了.一切已经变化了许多,一切似乎从没有改变. 前段时间调研了一次代理相关的知识,简单整理一下分享之.如有错误,欢迎指正. 涉及 Proxy IP应用 原理/ ...

  2. Wireshark抓包分析HTTPS与HTTP报文的差异

    一.什么是HTTPS: HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议 它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换 ...

  3. Wireshark抓包工具使用教程以及常用抓包规则

    转载:http://fangxin.blog.51cto.com/1125131/735178 Wireshark是一个非常好用的抓包工具,当我们遇到一些和网络相关的问题时,可以通过这个工具进行分析, ...

  4. TCP协议基础知识及wireshark抓包分析实战

    TCP相关知识 应swoole长连接开发调研相关TCP知识并记录. 数据封包流程 如图,如果我需要发送一条数据给用户,实际的大小肯定是大于你发送的大小,在各个数据层都进行了数据的封包,以便你的数据能完 ...

  5. Mac OS X上使用Wireshark抓包

    Wireshark针对UNIX Like系统的GUI发行版界面采用的是X Window(1987年更改X版本到X11).Mac OS X在Mountain Lion之后放弃X11,取而代之的是开源的X ...

  6. MAC Wireshark抓包IOS

    网络抓包是个基础技能,对于网络协议的掌握有一定的要求.iOS上实现网络抓包可以用Charles(针对http和https),tcpdump(快速分析网络包),和Wireshare.之前写过一篇介绍tc ...

  7. 使用wireshark抓包分析-抓包实用技巧

    目录 使用wireshark抓包分析-抓包实用技巧 前言 自定义捕获条件 输入配置 输出配置 命令行抓包 抓取多个接口 抓包分析 批量分析 合并包 结论 参考文献 使用wireshark抓包分析-抓包 ...

  8. 使用Fiddler抓包、wireshark抓包分析(三次握手、四次挥手深入理解)

    ==================Fiddler抓包================== Fiddler支持代理的功能,也就是说你所有的http请求都可以通过它来转发,Fiddler代理默认使用端口 ...

  9. Wireshark 抓包过滤器学习

    Wireshark 抓包过滤器学习 wireshark中,分为两种过滤器:捕获过滤器 和 显示过滤器 捕获过滤器 是指wireshark一开始在抓包时,就确定要抓取哪些类型的包:对于不需要的,不进行抓 ...

随机推荐

  1. datagrid分页 从后端获取数据也很简单

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Datagrid.aspx. ...

  2. mybatis 和 mybatis-spring

    一. 1. 实体bean  package com.mybatisBean; public class User { private Integer id; private String name; ...

  3. python panda库自动去重

    http://blog.csdn.net/xinxing__8185/article/details/48022401

  4. 系统调用方式文件编程-open

    通过Linux系统调用函数编写应用程序,该应用程序实现文件的复制功能 文件描述符--在Linux系统中,所有打开的文件也对应一个数字,这个数字由系统来分配. 1.打开文件--open 头文件:#inc ...

  5. 简明PR教程

    注意:本文供培训使用且仅为第一版 作者也不打算继续更新 本篇文章最早是在为内部培训时所编写的文章 有些疏漏且没有进行校正等工作 我尽力用最简单通俗的语言给大家介绍PR的使用方法 简明PR教程 1.编辑 ...

  6. python之零碎知识

    一 join方法 主要是做字符串的拼接:join后面跟的类型必须是要可迭代得到对象 for循环的对象是可迭代对象 # result = "".join(li) # print(re ...

  7. 2018.09.05 任务安排(斜率优化dp)

    描述 这道题目说的是,给出了n项必须按照顺序完成的任务,每项任务有它需要占用机器的时间和价值.现在我们有一台机器可以使用,它每次可以完成一批任务,完成这批任务所需的时间为一个启动机器的时间S加上所有任 ...

  8. Matlab 中以分数显示结果

    转http://www.blogbus.com/shijuanfeng-logs/234881647.html Matlab,计算得到的结果一般是小数形式. 但为了更精确表示,我们有时候需要用到分数形 ...

  9. ArcGIS Desktop python Add-in 创建一个插件

    1)创建一个项目 首先创建一个插件项目,本节介绍如何利用向导创建一个插件项目. 创建任何一个ArcGIS插件产品的过程都是一样的. 创建一个Python插件项目包括2个步骤: a) 选择一个插件项目文 ...

  10. iOS平台设置系统状态栏(通知栏、顶部状态栏)样式背景颜色或透明

    5+App开发 状态栏 配置系统状态栏样式 iOS平台可支持对系统状态栏样式的配置,在应用manifest.json文件的plus->distribute->apple下添加UIStatu ...