python tcpdump 非阻塞_肝了三天,万字长文教你玩转 tcpdump,从此抓包不用愁

今天要给大家介绍的一个 Unix 下的一个 网络数据采集分析工具--Tcpdump,也就是我们常说的抓包工具。

与它功能类似的工具有 wireshark ,不同的是,wireshark 有图形化界面,而 tcpdump 则只有命令行。

由于我本人更习惯使用命令行的方式进行抓包,因此今天先跳过 wireshark,直接给大家介绍这个 tcpdump 神器。

这篇文章,我肝了好几天,借助于Linux 的 man 帮助命令,我把 tcpdump 的用法全部研究了个遍,才形成了本文。

不夸张的说,应该可以算是中文里把 tcpdump 讲得最清楚明白,并且最全的文章了(至少我从百度、谷歌的情况来看是这样),所以本文值得你收藏分享,就怕你错过了,就再也找不到像这样把 tcpdump 讲得直白而且特全的文章了。

在讲解之前,有两点需要声明:第三节到第六节里的 tcpdump 命令示例,只为了说明参数的使用,并不一定就能抓到包,如果要精准抓到你所需要的包,需要配合第五节的逻辑逻辑运算符进行组合搭配。

不同 Linux 发行版下、不同版本的 tcpdump 可能有小许差异, 本文是基于 CentOS 7.2 的 4.5.1 版本的tcpdump 进行学习的,若在你的环境中无法使用,请参考 man tcpdump 进行针对性学习。

1. tcpdump 核心参数图解

大家都知道,网络上的流量、数据包,非常的多,因此要想抓到我们所需要的数据包,就需要我们定义一个精准的过滤器,把这些目标数据包,从巨大的数据包网络中抓取出来。

所以学习抓包工具,其实就是学习如何定义过滤器的过程。

而在 tcpdump 的世界里,过滤器的实现,都是通过一个又一个的参数组合起来,一个参数不够精准,那就再加一个,直到我们能过滤掉无用的数据包,只留下我们感兴趣的数据包。

tcpdump 的参数非常的多,初学者在没有掌握 tcpdump 时,会对这个命令的众多参数产生很多的疑惑。

就比如下面这个命令,我们要通过 host 参数指定 host ip 进行过滤$tcpdump host 192.168.10.100

主程序 + 参数名+ 参数值  这样的组合才是我们正常认知里面命令行该有的样子。

可 tcpdump 却不走寻常路,我们居然还可以在 host 前再加一个限定词,来缩小过滤的范围?$tcpdump src host 192.168.10.100

从字面上理解,确实很容易理解,但是这不符合编写命令行程序的正常逻辑,导致我们会有所疑虑:除了 src ,dst,可还有其它可以用的限定词?

src,host 应该如何理解它们,叫参数名?不合适,因为 src 明显不合适。

如果你在网上看到有关 tcpdump 的博客、教程,无一不是给你一个参数组合,告诉你这是实现了怎样的一个过滤器?这样的教学方式,很容易让你依赖别人的文章来使用 tcpdump,而不能将 tcpdump 这样神器消化,达到灵活应用,灵活搭配过滤器的效果。

上面加了 src 本身就颠覆了我们的认知,你可知道在 src 之前还可以加更多的条件,比如 tcp, udp, icmp 等词,在你之前的基础上再过滤一层。$tcpdump tcp src host 192.168.10.100

这种参数的不确定性,让大多数人对 tcpdump 的学习始终无法得其精髓。

因此,在学习 tcpdump 之前,我觉得有必要要先让你知道:tcpdump 的参数是如何组成的?这非常重要。

为此,我画了一张图,方便你直观的理解 tcpdump 的各种参数:

option 可选参数:将在后边一一解释,对应本文 第四节:可选参数解析

proto 类过滤器:根据协议进行过滤,可识别的关键词有:upd, udp, icmp, ip, ip6, arp, rarp,ether,wlan, fddi, tr, decnet

type 类过滤器:可识别的关键词有:host, net, port, portrange,这些词后边需要再接参数。

direction 类过滤器:根据数据流向进行过滤,可识别的关键字有:src, dst,同时你可以使用逻辑运算符进行组合,比如 src or dst

proto、type、direction 这三类过滤器的内容比较简单,也最常用,因此我将其放在最前面,也就是 第三节:常规过滤规则一起介绍。

而 option 可选的参数非常多,有的甚至也不经常用到,因此我将其放到后面一点,也就是 第四节:可选参数解析

当你看完前面六节,你对 tcpdump 的认识会上了一个台阶,至少能够满足你 80% 的使用需求。

你一定会问了,还有 20% 呢?

其实 tcpdump 还有一些过滤关键词,它不符合以上四种过滤规则,可能需要你单独记忆。关于这部分我会在  第六节:特殊过滤规则  里进行介绍。

2. 理解 tcpdump 的输出

2.1 输出内容结构

tcpdump 输出的内容虽然多,却很规律。

这里以我随便抓取的一个 tcp 包为例来看一下21:26:49.013621 IP 172.20.20.1.15605 > 172.20.20.2.5920: Flags [P.], seq 49:97, ack 106048, win 4723, length 48

从上面的输出来看,可以总结出:第一列:时分秒毫秒 21:26:49.013621

第二列:网络协议 IP

第三列:发送方的ip地址+端口号,其中172.20.20.1是 ip,而15605 是端口号

第四列:箭头 >, 表示数据流向

第五列:接收方的ip地址+端口号,其中 172.20.20.2 是 ip,而5920 是端口号

第六列:冒号

第七列:数据包内容,包括Flags 标识符,seq 号,ack 号,win 窗口,数据长度 length,其中 [P.] 表示 PUSH 标志位为 1,更多标识符见下面

2.2 Flags 标识符

使用 tcpdump 抓包后,会遇到的 TCP 报文 Flags,有以下几种:[S] : SYN(开始连接)

[P] : PSH(推送数据)

[F] : FIN (结束连接)

[R]

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值