2020
06/30
13:00
你的位置:首页 > 操纵眉目 > 万字长文教你玩转 tcpdump。让天下再也没有难抓的包

万字长文教你玩转 tcpdump,让天下再也没有难抓的包

发布时间:2020-06-30 13:00:23

原标题:万字长文教你玩转 tcpdump,让天下再也没有难抓的包

没有难抓的包,单单用不好 tcpdump 的人

images/loading.gif' data-original="http://image.iswbm.com/20200602135014.png" loading="lazy">

今天要给大家介绍的一个 Unix 下的一个 网络金十数据采集分析u盘启动盘制作工具,也就是我们常说的抓包u盘启动盘制作工具。

与它多功能沙发床类似的u盘启动盘制作工具有 wireshark ,wireshark 有图形化接触面,而 tcpdump 则单单命令行。

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

这篇文章,我肝了好几天。借助于Linux 的 man 帮助命令,我把 tcpdump 的用法满贯揣摩了个遍,才成功了本文,应该不错算是中文里把 tcpdump 讲得最不可磨灭光天化日,并且还最全的文章了(足足我从百度谷歌的变动来看),所以本文值得你收藏享受。就怕你错过了,就再也找不到像这么样把 tcpdump 讲得直白而且特全的文章了。

有两点要求宣言:

  1. 第三节到第六节里的 tcpdump 命令示例,只为了说明参数的使用,并不一定就能抓到包。如果要精准抓到你所要求的包,要求配合第五节的o2o商城的财务逻辑o2o商城的财务逻辑分量运算符展开粘结选配。
  2. 不同 Linux 发行版下,不同本子的 tcpdump 可能有小许股票软件开发差异。 本文是基于 CentOS 7.2 的 4.5.1 本子的tcpdump 展开学习的,若在你的环境中黔驴之技使用,请参考 man tcpdump 展开加强针对性学习。

1. tcpdump 核心参数举证

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

所以学习抓包u盘启动盘制作工具,其实就是学习如何定义反冲洗过滤器的过程。

而在 tcpdump 的世界里,反冲洗过滤器的实现。都是通过一个又一个的参数粘结起身,一个参数不够精准,那就再加一个,截至我们能过滤掉无用的金十只留下来我们感兴趣的金十数据包。

tcpdump 的参数非常的多,初学者在没有察察为明 tcpdump 时,会对其一命令的好多参数产生诸多的纳闷。

就比正象面其一命令,我们要通过 host 参数指定 host ip 展开过滤

$ tcpdump host 192.168.10.100

常驻程序 + 参数名+ 参数值 这么样的粘结才是我们正规认知里面命令行该有的样子。

可 tcpdump 却不走寻常路,我们居然还不错在 host 前再加一个限定词。来缩小过滤的商标注册许可范围?

$ tcpdump src host 192.168.10.100

从表意上理解,确实很容易理解。只是这不相符编写命令行程序的正规o2o商城的财务逻辑,引致我们会有所如何解决客户疑虑:

  1. 而外 src ,可还有任何不错用的限定词?

  2. src,host 应该如何理解它们。叫参数名?不贴切,归因于 src 明显不贴切。

如果你在网上观望有关 tcpdump 的博客。课程,无一鲁鱼亥豕给你一个参数粘结,告诉你这是实现了如何的一个反冲洗过滤器?这么样的教书方式,很容易让你依赖别人的文章来使用 tcpdump,而不能将 tcpdump 这么样神器消化,直达灵敏应用,灵敏选配反冲洗过滤器的效果。

上头加了 src 本身就颠覆了我们的认知,你可知道在 src 之前还不错加自称的环境,比如 tcp, udp, icmp 等词,在你之前的基础上再过滤一层。

$ tcpdump tcp src host 192.168.10.100

这类参数的可变性。让大多数人对 tcpdump 的学习自始至终黔驴之技得其精髓。

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

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

  1. option 可选参数:将在后边一一解说。
  2. proto 类反冲洗过滤器:根据商量展开过滤,可识别的基本词有: tcp, udp, icmp, ip, ip6, arp, rarp,ether,wlan, fddi, tr, decnet
  3. type 类反冲洗过滤器:可识别的基本词有:host, net, port, portrange,这些词后边要求再接参数。
  4. direction 类反冲洗过滤器:根据金十数据导向展开过滤,可识别的请输入关键字有:src, 同时你不错使用o2o商城的财务逻辑分量运算符展开粘结,比如 src or dst

proto,direction 这三类反冲洗过滤器的内容相形之下简单,也最常用,因此我将其厕身最之前。也就是 第三节:常规赛mvp过滤篮球规则一起介绍。

而 option 可选的参数非常多。有的乃至也不经常采取,因此我将其内置后面一点。也就是 第四节:可选参数辨析

当你看完之前六节,你对 tcpdump 的认识会上了一个李森祥台阶,足足力所能及满足你 80% 的使用需求分析。

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

其实 tcpdump 还有一些过滤基本词,它不相符以上四种过滤篮球规则,可能要求你单独记忆作文素材。关于这部分我会在 第六节:独特过滤篮球规则 里展开介绍。

2. 理解 tcpdump 的输入

2.1 输入内容结构

tcpdump 输入的内容虽然多,却很5+3+2151022的规律。

这里以我随便抓取的一个 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

从上中巴车输入去看。不错小结出:

  1. 第一列:时分秒毫秒 21:26:49.013621
  2. 第二列:网络商量 IP
  3. 第三列:发送方的ip地址大全+端小组口号霸气押韵,其中172.20.20.1是 ip,而15605 是端小组口号霸气押韵
  4. 第四列:箭头 >, 示意金十数据导向
  5. 第五列:接收方记录表的ip地址大全+端小组口号霸气押韵,其中 172.20.20.2 是 ip,而5920 是端小组口号霸气押韵
  6. 第六列:着重号
  7. 第七列:金十数据包内容,包括Flags 终结符,ack 号。win 窗口,金十数据长短 length,其中 [P.] 示意 PUSH 图标位为 1,自称终结符见下面

2.2 Flags 终结符

使用 tcpdump 抓包后,会遇到的 TCP 报文与帧 Flags,有以下几种:

  • [S] : SYN(序幕对接)
  • [P] : PSH(推送金十数据)
  • [F] : FIN (了结对接)
  • [R] : RST(重置对接)
  • [.] : 没有 Flag (意思是除上头四种门类外的其它变动,有可能是 ACK 也有可能是 URG)

3. 常规赛mvp过滤篮球规则

3.1 基于IP地址大全过滤:host

使用 host 就不错指定 host ip 展开过滤

$ tcpdump host 192.168.10.100

金十数据包的 ip 不错再细分为源ip和目标ip两种

# 根据源ip展开过滤$ tcpdump -i eth2 src 192.168.10.100# 根据目标ip展开过滤$ tcpdump -i eth2 dst 192.168.10.200

3.2 基于网段查询展开过滤:net

若你的ip商标注册许可范围是一个网段查询,不错直接这么样指定

$ tcpdump net 192.168.10.0/24

网段查询平等不错再细分为源网段查询和目标网段查询

# 根据源网段查询展开过滤$ tcpdump src net 192.168# 根据目标网段查询展开过滤$ tcpdump dst net 192.168

3.3 基于端口展开过滤:port

使用 port 就不错指定特定端口展开过滤

$ tcpdump port 8088

端口平等不错再细分为源端口,目标端口

# 根据源端口展开过滤$ tcpdump src port 8088# 根据目标端口展开过滤$ tcpdump dst port 8088

如果你想要同时指定两个女人的战争全集端口你不错这么样写

$ tcpdump port 80 or port 8088

但也不错简写成这么样

$ tcpdump port 80 or 8088

如果你的想抓取的不再是一两个女人的战争全集端口,唯独一个商标注册许可范围。一个一个指定就非常麻烦了。此时你不错这么样指定一个端口段。

$ tcpdump portrange 8000-8080$ tcpdump src portrange 8000-8080$ tcpdump dst portrange 8000-8080

对于一些常见商量的公认端口。我们还不错直接使用商量名,而不用具体的端小组口号霸气押韵

比如 http == 80,https == 443 等

$ tcpdump tcp port http

3.4 基于商量展开过滤:proto

常见的网络商量有:tcp, udp, icmp, http, ip,ipv6 等

若你只想验证 icmp 的包,不错直接这么样写

$ tcpdump icmp

protocol 可选值:ip, ip6, arp, rarp, atalk, aarp, decnet, sca, lat, mopdl, moprc, iso, stp, ipx, or netbeui

3.5 基本IP商量的本子展开过滤

当你想验证 tcp 的包,你也许会这么样子写

$ tcpdump tcp

这么样子写也没问题,就是不够精准。干吗这么说呢?

ip 根据本子的不同,不错再细分为 IPv4 和 IPv6 两种,如果你只指定了 这两种其实都会蕴含在内。

那有什么办法。力所能及将 IPv4 和 IPv6 区分飞来呢?

很简单,如果是 IPv4 的 tcp 包 ,就这么样写(友情唤醒:数字 6 示意的是 tcp 在ip报文与帧中的编号。)

$ tcpdump 'ip proto tcp'# or$ tcpdump ip proto 6# or$ tcpdump 'ip protochain tcp'# or $ tcpdump ip protochain 6

而如果是 IPv6 的 tcp 包 ,就这么样写

$ tcpdump 'ip6 proto tcp'# or$ tcpdump ip6 proto 6# or$ tcpdump 'ip6 protochain tcp'# or $ tcpdump ip6 protochain 6

关于上头这几个命令示例,有两点要求瞩目:

  1. 跟在 proto 和 protochain 后中巴车如果是 tcp, udp, icmp ,那般反冲洗过滤器要求用引号蕴含,这是归因于 tcp,udp, icmp 是 tcpdump 的请输入关键字。
  2. 跟在ip 和 ip6 请输入关键字后中巴车 proto 和 protochain 是两个女人的战争全集新面孔,看上去用法类似,它们是否等价。又有什么区别呢?

网络上没有找回很具体的死的会是谁正确答案,我唯其如此通过 man tcpdump 的唤醒, 提交自己的个人注册捉摸,但不保证正确。

proto 后面跟的 <protocol> 的基本词是永恒的。唯其如此是 ip, ip6, arp, rarp, atalk, aarp, decnet, sca, lat, mopdl, moprc, iso, stp, ipx, or netbeui 这里中巴车其中一个。

而 protochain 后面跟的 protocol 要求就没有那般严厉,它不错是逞性词,只要 tcpdump 的 IP 报文与帧头颅里的 protocol orderby多个字段为 <protocol> 就能匹配上。

理论上来讲,下面两种写法效果是一样的

$ tcpdump 'ip && tcp'$ tcpdump 'ip proto tcp'

平等的,这两种写法也是一样的

$ tcpdump 'ip6 && tcp'$ tcpdump 'ip6 proto tcp'

4. 可选参数辨析

4.1 设立不辨析域名提挈速度与激情6

  • -n:不把ip转化成域名。直接显示 ip,避免执行 DNS lookups 的过程,速度与激情6会快诸多
  • -nn:不把商量和端小组口号霸气押韵转化成名字测试打分,速度与激情6也会快诸多。
  • -N:不加盖出host 的域名部分.。如果设立了此选现,tcpdump 将会加盖'nic' 而鲁鱼亥豕 'nic.ddn.mil'.

4.2 过滤结果输入到广州钢制文件柜

使用 tcpdump u盘启动盘制作工具抓到包后,比比要求再借助其它的u盘启动盘制作工具展开分析,比如常见的 wireshark 。

而要使用wireshark ,我们得将 tcpdump 抓到的包金十数据变更到广州钢制文件柜中,最后再使用 wireshark 打开它便可。

使用 -w 参数后接一个以 .pcap 后缀命令的广州钢制文件柜名中蕴含违规内容,就不错将 tcpdump 抓到的金十数据保存到广州钢制文件柜中。

$ tcpdump icmp -w icmp.pcap

4.3 从广州钢制文件柜中读取包金十数据

使用 -w 是写入金十数据到广州钢制文件柜,而使用 -r 是从广州钢制文件柜中读取金十数据。

我们照样不错使用上述的反冲洗过滤器语法展开过滤分析。

$ tcpdump icmp -r all.pcap

4.4 控制详细内容的输入

  • -v:产生详细的输入. 比如包的TTL。金十数据包长短。以及IP包的一些披沙拣金。同时它还会打开一些附加的包审计完整性探测。比如对IP或ICMP包头颅的校验和。
  • -vv:产生比-v更详细的输入. 比如NFS回应包中的附加域将会被加盖, SMB金十数据包也会被浑然一体解码。手上我还未使用过)
  • -vvv:产生比-vv更详细的输入。比如 telent 时所使用的SB, SE 披沙拣金将会被加盖, 如果telnet同时使用的是图形接触面,其相应的图形披沙拣金将会以16进制转换了局的方式加盖出去手上我还未使用过)

4.5 控制时间的显示

  • -t :在每行的输入中不输入时间
  • -tt:在每行的输入中会输入时间戳
  • -ttt:输入每两行加盖的时间跨距(以毫秒为单位)
  • -tttt:在每行加盖的时间戳之前添加日子的加盖(此种披沙拣金,输入的时间最宏观)

4.6 显示金十数据包的头颅

  • -x:以16进制转换了局的形式加盖每股包的头颅金十数据(但不包括金十数据链路层的头颅)
  • -xx:以16进制转换了局的形式加盖每股包的头颅金十数据(包括金十数据链路层的头颅)
  • -X:以16进制转换了局和 ASCII码形式加盖出每股包的金十数据(但不包括对接层的头颅),这在分析一些新商量的金十数据包很稳便。
  • -XX:以16进制转换了局和 ASCII码形式加盖出每股包的金十数据(包括对接层的头颅),这在分析一些新商量的金十数据包很稳便。

4.7 过滤指定集成网卡的金十数据包

  • -i:指定要过滤的集成网卡接口,如果要验证所有集成网卡,不错 -i any

4.8 过滤特定导向的金十数据包

  • -Q: 甄选是入方向还是出方向的金十可披沙拣金有:in, out, inout,也不错使用 --direction=[direction] 这类写法

4.9 其它常用的一些参数

  • -A:以ASCII码方式显示每一个金十数据包(不显示链路层头颅信息). 在抓取蕴含网页金十数据的金十数据包时, 可稳便验证金十数据

  • -l : 基于行的输入,便于你保存验证,可能交到任何u盘启动盘制作工具分析

  • -q : 简明扼要地加盖输入。即加盖很少的商量呼吸相通信息, 从而输入行都相形之下简明扼要明了.

  • -c : 拿获 count 个包 tcpdump 就洗脱

  • -s : tcpdump 公认只会换取前 96 字节的内容,要想换取所有的报文与帧内容,不错使用 -s numbernumber 就是你要换取的报文与帧字节数,如果是 0 的话,示意换取报文与帧满贯内容。

  • -S : 使用绝对cs5序列号。而鲁鱼亥豕相对cs5序列号

  • -C:file-size,tcpdump 在把原始金十数据包直接保存到广州钢制文件柜中之前, 悔过书此广州钢制文件柜a4纸大小是否超过file-size. 如果超过了, 将关闭此广州钢制文件柜,另创一个广州钢制文件柜继续用于原始金十数据包的记录. 新开立的广州钢制文件柜名中蕴含违规内容与-w 披沙拣金指定的广州钢制文件柜名中蕴含违规内容一致, 但广州钢制文件柜名中蕴含违规内容后多了一个数字.该数字会从1序幕随着新开立广州钢制文件柜的增多而充实. file-size的单位是百万字节(nt: 这里指1,000,000个字节,永不1,048,576个字节, 后者无乃1024字节为1k, 1024k字节为1M刻划所得, 即1M=1024 * 1024 = 1,048,576)

  • -F:使用file 广州钢制文件柜作为过滤环境公式的输入, 此时命令行上的输入将被不在意.

4.10 对输入内容展开控制的参数

  • -D : 显示所有误用网络接口的列表
  • -e : 每行的加盖输入中将包括金十数据包的金十数据链路层头颅信息
  • -E : 揭秘IPSEC金十数据
  • -L :列出指定网络接口所赞同的金十数据链路层的门类后洗脱
  • -Z:后接队名,在抓包时会遭遇管理员权限什么获得的界定。如果以root储户起动tcpdump,tcpdump将会有上上储户管理员权限什么获得。
  • -d:加盖出易读的包匹配码
  • -dd:以C语言的形式加盖出包匹配码.
  • -ddd:以厂纪数的形式加盖出包匹配码

5. 过滤篮球规则粘结

有编程基础的同学,对于下面三个马o2o商城的财务逻辑分量运算符应该不陌生了吧

  • and:所有的环境都要求满足,也不错示意为 &&
  • or:只要有一个环境满足就不错,也不错示意为 ||
  • not:取反,也不错使用 !

举个例证,我想要求抓一个来自10.5.2.3,发往逞性主机的3389端口的包

$ tcpdump src 10.5.2.3 and dst port 3389

当你在使用多个反冲洗过滤器展开粘结时,有可能要求采取括号,而括号在 shell 中是独特符号,归因于你要求使用引号将其蕴含。例证正象:

$ tcpdump 'src 10.0.2.4 and (dst port 3389 or 22)'

而在单个反冲洗过滤器里,不时会判断一环境是否理所当然,这会儿,就要使用下面两个女人的战争全集符号

  • =:判断二者相等
  • ==:判断二者相等
  • !=:判断二者不相等

当你使用这两个女人的战争全集符号时,tcpdump 还供给了一些请输入关键字的接口来稳便我们展开判断,比如

  • if:示意集成网卡接口名,
  • proc:示意城市化进程名
  • pid:示意城市化进程 id
  • svc:示意 service class
  • dir:示意方向,in 和 out
  • eproc:示意 effective process name
  • epid:示意 effective process ID

比如我现在要过滤来自城市化进程名为 nc 发出的流经 en0 集成网卡的金十可能不流经 en0 的入方向金十不错这么样子写

$ tcpdump "( if=en0 and proc =nc ) || (if != en0 and dir=in)"

6. 独特过滤篮球规则

5.1 根据 tcpflags 展开过滤

通过网上贷款一分钟到账篇文章,我们知道了 tcp 的首部有一个图标位。

tcpdump 赞同我们根据金十数据包的图标位展开过滤

proto [ expr:size ]
  • proto:不错是熟知的商量其一(如ip,arp,udp,ipv6)

  • expr:不错是数值,也不错是一个公式,示意与指定的商量头序幕处的字节偏移量。

  • size:是可选的。示意从字节偏移量序幕取的字节额数。

然后,我将举几个例证,让人光天化日它的写法,不过在那之前,有几个点要求你光天化日,这在后中巴车例证中会采取:

1,tcpflags 不错理解为是一个氯化铵别名常量,齐名 13,它代表着与指定的商量头开头语呼吸相通的字节偏移量,也就是图标位,所以 tcp[tcpflags] 等价于 tcp[13] ,对应下图中的报文与帧位置。

2。tcp-fin, tcp-syn, tcp-rst, tcp-push, tcp-ack, tcp-urg 这些平等不错理解为氯化铵别名常量,分别代表 1。2,4,8,16,64。这些数字是如何刻划出去的呢?

以 tcp-syn 为例,你不错参考下面这张图。刻划出去的值 是就是 2

由于数字不好记忆作文素材,所以一般使用这么样的“氯化铵别名常量”示意。

因此当下面其一公式理所当然时。就代表其一包是一个 syn 包。

tcp[tcpflags] == tcp-syn

要抓取特定金十了局有诸多种微量元素注射液。

下面以最常见的 syn包为例,演示一下如何用 tcpdump 抓取到 syn 包,而其它的门类的包也是平等的道理。

据我小结,重点有三种写法:

1。第一种写法:使用数字示意偏移量

$ tcpdump -i eth0 "tcp[13] & 2 != 0" 

2。第二种写法:使用氯化铵别名常量示意偏移量

$ tcpdump -i eth0 "tcp[tcpflags] & tcp-syn != 0" 

3。第三种写法:使用鱼龙混杂写法

$ tcpdump -i eth0 "tcp[tcpflags] & 2 != 0" # or$ tcpdump -i eth0 "tcp[13] & tcp-syn != 0" 

如果我想同时拿获多种微量元素注射液门类的包呢,比如 syn + ack 包

1,第一种写法

$ tcpdump -i eth0 'tcp[13] == 2 or tcp[13] == 16'

2。第二种写法

$ tcpdump -i eth0 'tcp[tcpflags] == tcp-syn or tcp[tcpflags] == tcp-ack'

3,第三种写法

$ tcpdump -i eth0 "tcp[tcpflags] & (tcp-syn|tcp-ack) != 0" 

4,第四种写法:瞩目这里是 单个等号。而鲁鱼亥豕像上头一样两个女人的战争全集等号。18(syn+ack) = 2(syn) + 16(ack)

$ tcpdump -i eth0 'tcp[13] = 18'# or$ tcpdump -i eth0 'tcp[tcpflags] = 18'

tcp 中有 类似 tcp-syn 的氯化铵别名常量。其它商量也是有的,比如 icmp 商量,不错使用的氯化铵别名常量有

icmp-echoreply, icmp-unreach, icmp-sourcequench, icmp-redirect, icmp-echo, icmp-routeradvert,icmp-routersolicit, icmp-timx-ceed, icmp-paramprob, icmp-tstamp, icmp-tstampreply,icmp-ireq, icmp-ireqreply, icmp-maskreq, icmp-maskreply

5.2 基于包a4纸大小展开过滤

若你想验证指定a4纸大小的金十也是不错的

$ tcpdump less 32 $ tcpdump greater 64 $ tcpdump <= 128

5.3 根据 mac 地址大全展开过滤

例证正象。其中 ehost 是记录在 /etc/ethers 里的 name

$ tcpdump ether host [ehost]$ tcpdump ether dst	[ehost]$ tcpdump ether src	[ehost]

5.4 过滤通过指定网桥的金十数据包

$ tcpdump gateway [host]

5.5 过滤广播/多播金十数据包

$ tcpdump ether broadcast$ tcpdump ether multicast$ tcpdump ip broadcast$ tcpdump ip multicast$ tcpdump ip6 multicast

7. 如何抓取到更精准的包?

先给你抛出一个问题:如果我只想抓取 HTTP 的 POST 请求该如何写呢?

如果只学习了上中巴车内容,或许你还是黔驴之技写法满足其一抓取需求分析的反冲洗过滤器。

在学习之前,我先提交死的会是谁正确答案,然后再条分缕析一下,其一反冲洗过滤器是如何生效的,居然能让我们对包内的内容展开判断。

$ tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4]'

命令里的可选参数,在前中巴车内容里已经详细讲过了。这里不再细讲。

本节的重点是引号里的内容,看上去很复杂的样子。

将它逐一分解。我们只要先理解了下面几种用法,就能光天化日

  • tcp[n]:示意 tcp 报文与帧里 第 n 个字节

  • tcp[n:c]:示意 tcp 报文与帧里从第n个字节序幕取 c 个字节,tcp[12:1] 示意从报文与帧的第12个字节(归因于有第0个字节,所以这里的12其实示意的是13)序幕算起取一个字节,也就是 8 个bit。验证 tcp 的报文与帧首部结构。不错得知这 8 个bit 其实就是下图中的红框圈起身的位置。而在这里我们只要之前 4个bit,也就是实际金十数据在从头至尾报文与帧首部中的偏移量。

  • &:是位运算里的 and 制表符,比如 0011 & 0010 = 0010

  • >>:是位运算里的右移操纵。比如 0111 >> 2 = 0001

  • 0xf0:是 10 进制转换了局的 240 的 16 进制转换了局示意。但对于位操纵来说,10进制转换了局和16进制转换了局都将毫无旅行的意义,我们要求的是二进制转换了局转厂纪,将其转换成二进制转换了局转厂纪后是:11110000。其一数有什么特点呢?之前个 4bit 满贯是 1,后面4个bit满贯是0,之后看你就知道其一特点有什么用了。

再逐渐并轨起身看

1,tcp[12:1] & 0xf0 其实并不宏观,只是我们将它换一种写法,虚设 tcp 报文与帧中的 第12 个字节是这么样组成的 10110000。那般其一公式就不错变成 10110110 && 11110000 = 10110000,得到了 10110000 后,再投入下一步。

2,tcp[12:1] & 0xf0) >> 2 :如果你不理解 tcp 报文与帧首州里的金十数据偏移,请先点击其一前往我的网上贷款一分钟到账篇文章,搞懂金十数据偏移的旅行的意义。要不然我保证你这里会绝对会听懵了。

tcp[12:1] & 0xf0) >> 2 其一公式实际是 (tcp[12:1] & 0xf0) >> 4 ) << 2 的简写形式。所以要搞懂 tcp[12:1] & 0xf0) >> 2 只要理解了(tcp[12:1] & 0xf0) >> 4 ) << 2 就行了 。

从网上贷款一分钟到账步我们算出了 tcp[12:1] & 0xf0 的值其实是一个字节,也就是 8 个bit,只是你再赶回看下上中巴车 tcp 报文与帧首部结构图,示意金十数据偏移量的单单 4个bit,且不说 上头得到的值 10110000,之前 4 位(1011)才是正确的偏移量,那般为了得到 1011,只要求将 10110000 右移4位便可,也就是 tcp[12:1] & 0xf0) >> 4,至此终年txt我们是否已经得出了实际金十数据的正确位置呢。很缺憾还没有,前一篇文章里我们讲到 Data Offset 的单位是 4个字节,归因于要将 1011 乘以 4才不错,除以4执政运算中齐名左移2位,也就是 <<2,与前中巴车 >>4 拜天地起身一起算的话,最终的运算不错简改为 >>2

至此终年txt,我们终于得出了实际金十数据序幕的位置是 tcp[12:1] & 0xf0) >> 2 (单位是字节)。

找回了金十数据的我真是大明星后,可别忘了我们的目的是从金十数据中打到 HTTP 请求的了局。是 GET 呢 还是 POST ,可能是其它的?

有了上中巴车感受,我们自然知情使用 tcp[((tcp[12:1] & 0xf0) >> 2):4] 从金十数据序幕的位置再取出四个字节,然后将结果与 GET (瞩目 GET最后还有个空格)的 16进制转换了局写法(也就是 0x47455420)展开比对。

0x47 --> 71 --> G0x45 --> 69 --> E0x54 --> 84 --> T0x20 --> 32 --> 空格

如果相等,则该公式为True,tcpdump 认为这就是我们所要求抓的金十将其输入到我们的末流屏幕上。

8. 抓包实战应用例证

8.1 提取 HTTP 的 User-Agent

从 HTTP 请求头中提取 HTTP 的 User-Agent:

$ tcpdump -nn -A -s1500 -l | grep "User-Agent:"

通过 egrep 不错同时提取User-Agent 和主机名(或其它头广州钢制文件柜):

$ tcpdump -nn -A -s1500 -l | egrep -i 'User-Agent:|Host:'

8.2 抓取 HTTP GET 和 POST 请求

抓取 HTTP GET 请求包:

$ tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'# or$ tcpdump -vvAls0 | grep 'GET'

不错抓取 HTTP POST 请求包:

$ tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354'# or $ tcpdump -vvAls0 | grep 'POST'

瞩目:该了局不能保证抓取到 HTTP POST 中用金十数据流量,归因于一个 POST 请求会被分割为多个 TCP 金十数据包。

8.3 找回发包数最多的 IP

找回一段时间内发包最多的 IP,可能从一堆报文与帧中找回发包最多的 IP,不错使用下中巴车命令:

$ tcpdump -nnn -t -c 200 | cut -f 1,2,3,4 -d '.' | sort | uniq -c | sort -nr | head -n 20
  • cut -f 1,2,3,4 -d '.' : 以 . 为word分隔符在哪里,加盖出每行的前四列。即 IP 地址大全。
  • sort | uniq -c : 排序并计数
  • sort -nr : 比照数值a4纸大小逆向排序

8.4 抓取 DNS 请求和响应

DNS 的公认端口是 53,因此不错通过端口展开过滤

$ tcpdump -i any -s0 port 53

8.5 切除 pcap 广州钢制文件柜

当抓取大量金十数据并写入广州钢制文件柜时,不错自动切除为多个a4纸大小相同的广州钢制文件柜。比如,下中巴车命令示意每 3600 秒开立一个新广州钢制文件柜 capture-(hour).pcap,每股广州钢制文件柜a4纸大小不超过 200*1000000 字节:

$ tcpdump -w /tmp/capture-%H.pcap -G 3600 -C 200

这些广州钢制文件柜的命名为 capture-{1-24}.pcap,24 钟点之后。之前的广州钢制文件柜就会被覆盖。

8.6 提取 HTTP POST 请求中的密码

从 HTTP POST 请求中提取密码和主机名:

$ tcpdump -s 0 -A -n -l | egrep -i "POST /|pwd=|passwd=|password=|Host:"

8.7 提取 HTTP 请求的 URL

提取 HTTP 请求的主机名和路径:

$ tcpdump -s 0 -v -n -l | egrep -i "POST /|GET /|Host:"

8.8 抓取 HTTP 中用金十数据包

抓取 80 端口的 HTTP 中用金十剪除 TCP 对接起家过程的金十数据包(SYN / FIN / ACK):

$ tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

8.9 拜天地 Wireshark 展开分析

通常 Wireshark(或 tshark)比 tcpdump 更容易分析应用层商量。一般的割接法是在近程孵卵器上先使用 tcpdump 抓取金十数据并写入广州钢制文件柜。然后再将广州钢制文件柜拷贝数到本地移动工作站上用 Wireshark 分析。

还有一种更高效的了局,不错通过 ssh 对接将抓取到的金十数据实时发送给 Wireshark 展开分析。以 MacOS 眉目为例。不错通过 brew cask install wireshark 来安学驾照装。然后通过下中巴车命令来分析:

$ ssh root@remotesystem 'tcpdump -s0 -c 1000 -nn -w - not port 22' | /Applications/Wireshark.app/Contents/MacOS/Wireshark -k -i -

比如,如果想分析 DNS 商量,不错使用下中巴车命令:

$ ssh root@remotesystem 'tcpdump -s0 -c 1000 -nn -w - port 53' | /Applications/Wireshark.app/Contents/MacOS/Wireshark -k -i -

抓取到的金十数据:

-c 披沙拣金用来界定抓取金十数据的a4纸大小。如果不界定a4纸大小,就唯其如此通过 ctrl-c 来停止抓取,如是说不仅关闭了 tcpdump,也关闭了 wireshark。

到这里,我已经将我所知道的 tcpdump 的用法满贯说了一遍,如果你有认真地看完本文,相信会有不小的成果,察察为明一个上手的抓包u盘启动盘制作工具,对于以后我们学习网络。分析网络商量,以及定位网络问题,会很有帮助,而 tcpdump 是我推荐的一个抓包u盘启动盘制作工具。

9. 参考文章

  1. FreeBSD Manual Pages About tcpdump
  2. Linux tcpdump命令详解
  3. 一份快速得力的 tcpdump 命令参考手册
  4. 超详细的网络抓包神器 tcpdump windows10使用指南
  5. [译]tcpdump 示例课程
  6. [英]tcpdump 示例课程

原标题:万字长文教你玩转 tcpdump,让天下再也没有难抓的包

基本词:

转载请保存本文网址管家: http://www.www.d5897.com/a/462464.html
*破例宣言:以上内容来自于网络编采,著作权属性质原作者所有,请联系我们: admin#www.d5897.com (#换成@)。
您可能感兴趣的文章
Baidu