2020
07/01
14:00
你的位置:msn.com > 操作系统 > 全网最详细的 tcpdump windows10施用指南

全网最详细的 tcpdump windows10施用指南

发布时间:2020-07-01 14:00:50

原标题:全网最详细的 tcpdump windows10施用指南

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

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

今天要给大家吟味的一个 Unix 下的一个 网络数据采集分析工具,也特别是我们常说的抓包工具。

与它功能接近的工具有 wireshark ,不同的是。wireshark 有数学图形化界面,而 tcpdump 则单单命令行。

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

我肝了好几天,凭借于Linux 的 man 支援命令,我把 tcpdump 的用法全部研究了个遍,才形成了本文,不夸大其辞的说,应该可以算是中文里把 tcpdump 讲得最不可磨灭光天化日,而且还最全的文章了(至少我从百度谷歌的情况见兔顾犬),所以本文犯得上你收藏分享,就怕你错过了。就再也找缺席像这样把 tcpdump 讲得直白而且特全的文章了。

在讲解之前,有两点需要宣言:

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

1. tcpdump cpu核心卫星参数图解

大家都理解,网络上的含氧量。离谱儿的多,故此要想抓到我们所需要的就需要我们概念一个精准的反冲洗过滤器,把这些目标从粗大的数据包网络中抓取出去。

所以学习抓包工具,实质上特别是学习如何概念反冲洗过滤器的强歼女人过程。

而在 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. 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, dst,同时你可以施用逻辑分量运算符进行组合,比如 src or dst

direction 这乙类反冲洗过滤器的内容相形之下简单,也最贸易常用英语口语,故此我将其厕身最之前。也特别是 第三节:常规过滤篮球规则一行吟味。

而 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. 第四列:双箭头2无敌版 >, 表示数据导向
  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. 常规过滤篮球规则

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 字段为 <protocol> 就能结亲上。

理论上却说,下面两种写法作用是一样的

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

这两种写法也是一样的

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

4. 可选卫星参数辨析

4.1 设置不辨析域名提挈速度

  • -n:不把ip转化成域名,直接炫耀 ip,避免执行 DNS lookups 的强歼女人过程,速度会快诸多
  • -nn:不把协议和端口号转化成名字。速度也会快诸多。
  • -N:不加盖出host 的域名部分.。如果设置了此选现,tcpdump 将会加盖'nic' 而不是 'nic.ddn.mil'.

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

施用 tcpdump 工具抓到包后,比比需要再凭借其他的工具进行分析,比如平平不时的 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。id标记,以及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 : 依据行的输出,便于你保存查看,可能交给其它工具分析

  • -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:以Cc语言入门的形式加盖出包结亲码.
  • -ddd:以厂纪数的形式加盖出包结亲码

5. 过滤篮球规则组合

有编程基础的同学,对此下面三个马逻辑分量运算符应该不来路不明了吧

  • 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,icmp,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,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 请求的主机名和java路径:

$ 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 的用法全部说了一遍,如果你有敬业爱岗地看完本文,相信会有不小的收获,察察为明一个上手的抓包工具,对此以后我们学习网络。分析网络协议,以及定点网络问题,会很有支援,而 tcpdump 是我援引的一个抓包工具。

9. 参照文章

  1. FreeBSD Manual Pages About tcpdump
  2. Linux tcpdump命令详解
  3. 一份快速实用的 tcpdump 命令参照首辅养成手册乐文
  4. 超详细的网络抓包神器 tcpdump windows10施用指南
  5. [译]tcpdump 示例教程
  6. [英]tcpdump 示例教程

原标题:全网最详细的 tcpdump windows10施用指南

基本词:

转载请保留本文网址: http://www.www.d5897.com/a/462517.html
*破例宣言:之上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#www.d5897.com (#换成@)。
您可能感兴趣的文章
Baidu