在初学TCP/IP协议时,会觉得协议是一种很抽象的东西,通过wireshark抓包分析各种协议,可以让抽象变得具体。

  • wireshark抓包

    wireshar抓包的教程很多,这里就不再重复。参考下图:

 
wireshark抓包
  • wireshark快速get对应filter

我们知道wireshark抓到的内容很多,要过滤我们需要的信息就需要设置对应的filter,例如:想要过滤ICMP协议相关的log,直接在Filter里面输入协议名称"icmp",就能过滤出ICMP的log。

这是一种最简单的过滤条件了。实际上设置filter的语句有很多,如果想要过滤ICMP中type为3(目的地不可到达)的数据报,但又不知道filter应该怎么写,那应该怎么办呢?

这个时候,我们就可以直接利用wireshark提供的As Filter功能,快速get到想要设置的filter。

如下图所示,要过滤ARP数据报中的ARP请求数据报,直接选中Opcode: request(1),右键 ->Copy->As Filter,就能得到对应filter。

 
wireshark快速get对应filter
  • IP数据报

  • IPv4报文首部

要分析IP数据报的内容,首先得知道它的数据报的数据结构。

 
IPv4报文首部 - 图片来自维基百科
  • wireshark过滤IP数据报

然后过滤IP数据报,从下面这个图可以看出,IP数据报被封装到以太网帧里面,当以太网帧的type值为0x0800时,那么以太网帧封装的就是IP数据报了。

 
IP数据报被封装到以太网帧里面

因此,设置eth.type == 0x800就能过滤出IP数据报。根据下图,再对比IPv4报文首部的数据结构,就可以更加清晰地理解IP数据报了。

 
IP数据报
  • ARP

  • ARP报文格式

 
ARP报文格式 - 图片来自维基百科
  • wireshark过滤ARP数据报

和IP数据报一样,ARP数据报被封装到以太网帧里面,当以太网帧的type值为0x0806,设置
eth.type == 0x806就能过滤ARP数据报。

ARP数据报又分为请求数据报和应答数据报。
首先,查看我本机的MAC地址,在wireshark中过滤ARP请求数据报的MAC地址等于我本机地址的一条log。如下图,本机请求IP地址为10.120.1.91的主机的MAC的ARP请求。

 
ARP请求

通过上面的ARP数据报,我又可以得到ARP请求中Sender IP address的Filter格式,我只需要过滤
Sender IP address为10.120.1.91,最后过滤出来的结果就只有2条。

查看其中Target MAC address为我本机MAC地址,并且Opcode为2,即是10.120.1.91返回的APR应答,其中Sender MAC address,就是ARP请求得到的MAC地址。

 
ARP应答
  • ICMP

  • ICMP数据报格式

 
ICMP报头 - 图片来自维基百科
  • wireshark过滤ICMP数据报

ICMP报头格式虽然简单,但是对应类型很多,分析方法也是类似的,选中你想要设置为过滤条件的参数,然后copy为filter

 
ping request
 
ping reply
 
没有到达目的地的路由
 
ICMP重定向
  • 参考

  • [TCPIP] TCP/IP Illustrated, Volume 1: The Protocols. W. Richard Stevens.

  • IPv4

  • ARP

  • ICMP

 

TCP/IP详解卷1 - wireshark抓包分析的更多相关文章

  1. 《TCP/IP详解卷1:协议》第1章 概述-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  2. 《TCP/IP详解卷1:协议》第2章 链路层-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  3. 《TCP/IP详解卷1:协议》第3章 IP:网际协议(1)-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  4. 《TCP/IP详解卷1:协议》第3章 IP:网际协议(2)-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  5. 《TCP/IP详解卷1:协议》第4章 ARP:地址解析协议-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  6. 《TCP/IP详解卷1:协议》第5章 RARP:逆地址解析协议-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  7. 《TCP/IP详解卷1:协议》第6章 ICMP:Internet控制报文协议-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  8. 《TCP/IP详解卷1:协议》第11章 UDP:用户数据报协议-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  9. 《TCP/IP详解卷1:协议》第17、18章 TCP:传输控制协议(1)-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

随机推荐

  1. HDFS源码分析心跳汇报之数据块增量汇报

    在<HDFS源码分析心跳汇报之BPServiceActor工作线程运行流程>一文中,我们详细了解了数据节点DataNode周期性发送心跳给名字节点NameNode的BPServiceAct ...

  2. 跳过权限检查,强制修改mysql密码

    windows: 1,停止MYSQL服务,CMD打开DOS窗口,输入 net stop mysql 2,在CMD命令行窗口,进入MYSQL安装目录 比如E:\Program Files\MySQL\M ...

  3. webstorm vscode 常用设置

    webstorm常用的设置及操作图解 VS Code 新建vue文件初始化模板 VSCode新建vue文件自定义模板

  4. 一个比较好用的Socket测试工具——Hercules SETUP

    官网:http://www.hw-group.com/products/hercules/index_en.html 不要再自己傻傻的写socket测试客户端了 Hercules is great u ...

  5. ZookeeperclientAPI之创建会话(六)

    Zookeeper对外提供了一套Java的clientAPI. 本篇博客主要讲一下创建会话. 创建项目 首选,创建一个基于maven管理的简单javaproject.在pom文件里引入zookeepe ...

  6. 【iOS开发-63】Unknown type name &quot;CGRect&quot;,did you mean &quot;Rect&quot;?的解决方式

    出现这个问题的童鞋,差点儿都是由于用了Xcode6. 原因:在Xcode6之前,创建的文件系统会自己主动为用户导入Foundation.h和UIKit.h文件,可是最新的Xcode6仅仅为用户导入了F ...

  7. 剑指Offer:二叉树中和为某一值的路径【34】

    剑指Offer:二叉树中和为某一值的路径[34] 题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. ...

  8. php远程下载文件

    <?php /* 本源码来源于网络 http://user.qzone.qq.com/292672703 */ header("content-Type: text/html; cha ...

  9. springboot 默认tomcat配置

    1. Spring Boot 能支持的最大并发量主要看其对Tomcat的设置,可以在配置文件中对其进行更改.当在配置文件中敲出max后提示值就是它的默认值. 我们可以看到默认设置中,Tomcat的最大 ...

  10. C++函数模板的显示调用与隐式调用

    C++函数模板可以显示调用与可以隐式调用 首先定义函数模板: template <class T> inline const T& c_max (const T& a, c ...