介绍
tcpdump 是一款强大的网络抓包工具,运行在 linux 平台上。熟悉 tcpdump 的使用能够帮助你分析、调试网络数据。
常用选项
-n 表示不要解析域名,直接显示 ip。
-nn** 不要解析域名和端口。
-X 同时用 hex 和 ascii 显示报文的内容。
-XX 同 -X,但同时显示以太网头部。
-S 显示绝对的序列号(sequence number),而不是相对编号。
-i 监听的网卡。
-v, -vv, -vvv 显示更多的详细信息。
-c number 截取 number 个报文,然后结束。
-A 只使用 ascii 打印报文的全部数据,不要和 -X 一起使用。
-D 列出所有可以监控的网卡。
-s 指定每条报文的最大字节数,默认为262144,如果值为0时,表示不截断,抓取完整的数据包
过滤器
机器上的网络报文数量异常的多,很多时候我们只关系和具体问题有关的数据报(比如访问某个网站的数据,或者 icmp 超时的报文等等),而这些数据只占到很小的一部分。把所有的数据截取下来,从里面找到想要的信息无疑是一件很费时费力的工作。而 tcpdump 提供了灵活的语法可以精确地截取关心的数据报,简化分析的工作量。这些选择数据包的语句就是过滤器(filter)!
过滤器也可以简单地分为三类:type, dir 和 proto。
Type 让你区分报文的类型,主要由 host(主机), net(网络) 和 port(端口) 组成。src(源地址) 和 dst(目的地址) 也可以用来过滤报文的源地址和目的地址。
过滤的真正强大之处在于你可以随意组合它们,而连接它们的逻辑就是常用的 与/AND/&& 、 或/OR/|| 和 非/not/!。
用例
1.监听所有端口,直接显示 ip 地址
tcpdump -nS
2.显示更详细的数据报文,包括 tos, ttl, checksum 等
tcpdump -nnvvS
3.显示数据报的全部数据信息,用 hex 和 ascii 两列对比输出
tcpdump -nnvvXS
4.监控一个指定的网络接口
tcpdump -i eth0
5.基于IP查找流量
tcpdump host 114.114.114.114
6.根据来源和目标进行筛选
tcpdump src 1.1.1.1 (源地址)
tcpdump dst 1.0.0.1 (目的地址)
tcpdump not src 1.1.1.1 (过滤源地址)
tcpdump not dst 1.0.0.1 (过滤目的地址)
7.查看某一网段或者子网的进出流量
tcpdump net 1.2.3.0/24
8.使用十六进制输出
tcpdump -c 1 -X icmp
9.显示特定端口的流量
tcpdump port 3389
tcpdump src port 1025
tcpdump dst port 1026
10.显示特定协议的流量
tcpdump icmp
tcpdump udp
tcpdump tcp
11.查看某一范围内的所有端口的流量
tcpdump portrange 21-23
12.将包存在文件中
tcpdump port 80 -w capture_file
13.从文件中读取
tcpdump -r capture_file
14.来自特定的IP,发往特定的端口
tcpdump -nnvvS src 139.5.6.4 and dst port 3389
15.从某个网段来,到某个网段去
tcpdump -nvX src net 192.168.0.0/16 and dst net 10.0.0.0/8 or 172.16.0.0/16
16.到某个IP的非ICMP流量
tcpdump dst 192.168.0.2 and src net and not icmp
tcpdump -vv src mars and not dst port 22
17.GET请求
tcpdump -vvAls0 | grep 'GET'
tcpdump -s 0 -A 'tcp dst port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'
18.POST请求
tcpdump -vvAls0 | grep 'Host:'
tcpdump -s 0 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'
输出
10:35:25.648675 IP chenlvzhoudembp.54018 > 192.168.1.1.domain: 18464+ PTR? 1.1.168.192.in-addr.arpa. (42)
10:35:25.650092 IP 192.168.1.1.domain > chenlvzhoudembp.54018: 18464* 1/0/0 PTR 192.168.1.1. (67)
10:35:25.895269 IP chenlvzhoudembp.58063 > 117.34.61.133.http: Flags [F.], seq 706908684, ack 3609747502, win 4096, length 0
10:35:25.896315 IP chenlvzhoudembp.52148 > 192.168.1.1.domain: 8596+ PTR? 133.61.34.117.in-addr.arpa. (44)
10:35:26.739836 IP chenlvzhoudembp.57928 > 14.215.177.39.https: Flags [F.], seq 907035098, ack 3372296595, win 4096, length 0
10:35:26.790594 IP 192.168.1.1.domain > chenlvzhoudembp.52148: 8596 NXDomain 0/1/0 (106)
第一列:时分秒毫秒
第二列:网络协议
第三列:发送方的ip地址+端口号(或者协议)
第四列:>
第五列:接收方的ip地址+端口号(或者协议)
第六列:冒号
第七列:Flag标识符:
[S]:建立连接的标识SYN
[P]:发送数据的标识
[F]:结束连接的标识FIN
[.]:没有标识