CSDN|肝了三天,万字长文教你玩转 tcpdump,从此抓包不用愁


CSDN|肝了三天,万字长文教你玩转 tcpdump,从此抓包不用愁
本文插图

今天要给大家介绍的一个 Unix 下的一个 网络数据采集分析工具 -- Tcpdump , 也就是我们常说的抓包工具 。
与它功能类似的工具有 wireshark, 不同的是 , wireshark 有图形化界面 , 而 tcpdump 则只有命令行 。
由于我本人更习惯使用命令行的方式进行抓包 , 因此今天先跳过 wireshark , 直接给大家介绍这个 tcpdump 神器 。
这篇文章 , 我肝了好几天 , 借助于Linux 的 man 帮助命令 , 我把 tcpdump 的用法全部研究了个遍 , 才形成了本文 。
不夸张的说 , 应该可以算是中文里把 tcpdump 讲得最清楚明白 , 并且最全的文章了(至少我从百度、谷歌的情况来看是这样) , 所以本文值得你收藏分享 , 就怕你错过了 , 就再也找不到像这样把 tcpdump 讲得直白而且特全的文章了 。
在讲解之前 , 有两点需要声明:

  1. 第三节到第六节里的 tcpdump 命令示例 , 只为了说明参数的使用 , 并不一定就能抓到包 , 如果要精准抓到你所需要的包 , 需要配合第五节的逻辑逻辑运算符进行组合搭配 。
  2. 不同 Linux 发行版下、不同版本的 tcpdump 可能有小许差异 ,本文是基于 CentOS 7.2 的 4.5.1 版本的tcpdump 进行学习的 , 若在你的环境中无法使用 , 请参考 man tcpdump 进行针对性学习 。

tcpdump 核心参数图解大家都知道 , 网络上的流量、数据包 , 非常的多 , 因此要想抓到我们所需要的数据包 , 就需要我们定义一个精准的过滤器 , 把这些目标数据包 , 从巨大的数据包网络中抓取出来 。 所以学习抓包工具 , 其实就是学习如何定义过滤器的过程 。 而在 tcpdump 的世界里 , 过滤器的实现 , 都是通过一个又一个的参数组合起来 , 一个参数不够精准 , 那就再加一个 , 直到我们能过滤掉无用的数据包 , 只留下我们感兴趣的数据包 。 tcpdump 的参数非常的多 , 初学者在没有掌握 tcpdump 时 , 会对这个命令的众多参数产生很多的疑惑 。 就比如下面这个命令 , 我们要通过 host 参数指定 host ip 进行过滤$ tcpdump host 192.168.10.100主程序 + 参数名+ 参数值 这样的组合才是我们正常认知里面命令行该有的样子 。 可 tcpdump 却不走寻常路 , 我们居然还可以在 host 前再加一个限定词 , 来缩小过滤的范围?$ tcpdump src host 192.168.10.100从字面上理解 , 确实很容易理解 , 但是这不符合编写命令行程序的正常逻辑 , 导致我们会有所疑虑:
  1. 除了 src, dst , 可还有其它可以用的限定词?
  2. src , host 应该如何理解它们 , 叫参数名?不合适 , 因为 src 明显不合适 。
如果你在网上看到有关 tcpdump 的博客、教程 , 无一不是给你一个参数组合 , 告诉你这是实现了怎样的一个过滤器?这样的教学方式 , 很容易让你依赖别人的文章来使用 tcpdump , 而不能将 tcpdump 这样神器消化 , 达到灵活应用 , 灵活搭配过滤器的效果 。 上面加了 src 本身就颠覆了我们的认知 , 你可知道在 src 之前还可以加更多的条件 , 比如 tcp, udp, icmp 等词 , 在你之前的基础上再过滤一层 。 $ tcpdump tcp src host 192.168.10.100这种参数的不确定性 , 让大多数人对 tcpdump 的学习始终无法得其精髓 。 因此 , 在学习 tcpdump 之前 , 我觉得有必要要先让你知道:tcpdump 的参数是如何组成的?这非常重要 。 为此 , 我画了一张图 , 方便你直观的理解 tcpdump 的各种参数:
CSDN|肝了三天,万字长文教你玩转 tcpdump,从此抓包不用愁
本文插图
  1. option 可选参数:将在后边一一解释 , 对应本文 第四节:可选参数解析


    推荐阅读