tcpdump的用法示例
基本用法
安装
yum install tcpdump -y
语法格式
tcpdump [-AennqX] [-i 接口] [-w 保存的文件名] [-c 次数] [-r 已经保存好的tcpdump文档] [想抓取到的数据包的具体格式或者说是协议]
选项和参数:
-A :数据包的内容以 ASCII 显示,通常用来捉取 WWW 的网页数据包资料。
-e :使用资料连接层 (OSI 第二层) 的 MAC 数据包资料来显示;
-nn:直接以 IP 及 port number 显示,而非主机名与服务名称
-q :仅列出较为简短的数据包资讯,每一行的内容比较精简
-X :可以列出十六进位 (hex) 以及 ASCII 的数据包内容,对于监听数据包内容很有用
-i :后面接要『监听』的网卡接口,例如 eth0, lo, ppp0 等接口;
-w :如果你要将监听所得的数据包资料储存下来,用这个参数就对了!后面接文件名
-r :从后面接的文件中读出来。这个文件必须是已经存在的文件,并且这个『文件』是由 -w 所制作出来的。
-c :监听的数据包数,如果没有这个参数, tcpdump 会持续不断的监听, 直到使用者输入 [ctrl]-c 为止。
所欲抓取的数据包格式:我们可以专门针对某些通讯协议或者是 IP 来源进行数据包的抓取,那就可以简化输出的结果,并取得最有用的资讯。
常见的表示方法有:
- 'host foo', 'host 127.0.0.1' :针对单部主机来进行数据包撷取
- 'net 192.168' :针对某个网域来进行数据包的撷取;
- 'src host 127.0.0.1' 'dst net 192.168':同时加上来源(src)或目标(dst)限制
- 'tcp port 21':还可以针对通讯协定侦测,如 tcp, udp, arp, ether 等
还可以利用 and 与 or 来进行数据包资料的整合显示呢!
使用案例
# 抓取网卡 eth0 上的数据包,并以 ip 与端口号的方式展示
$ tcpdump -i eth0 -nn
17:04:27.784377 IP 172.16.153.160.22 > 172.16.153.1.58933: Flags [P.], seq 1700472:1700836, ack 1117, win 313, options [nop,nop,TS val 59343227 ecr 1067292474], length 364
17:04:27.784599 IP 172.16.153.1.58933 > 172.16.153.160.22: Flags [.], ack 1700836, win 4084, options [nop,nop,TS val 1067292474 ecr 59343227], length 0
17:04:27.784611 IP 172.16.153.1.58933 > 172.16.153.160.22: Flags [P.], seq 1117:1153, ack 1700836, win 4096, options [nop,nop,TS val 1067292474 ecr 59343227], length 36
^C # 按下 Ctrl + c 结束
9472 packets captured # 抓取到的所有数据包的数量
9472 packets received by filter # 过滤后的数据包数量
0 packets dropped by kernel # 被内核丢弃的数据包数量
# 我们来拿其中的一条来简单的说明以一下
17:04:27.784611 IP 172.16.153.1.58933 > 172.16.153.160.22: Flags [P.], seq 1117:1153, ack 1700836, win 4096, options [nop,nop,TS val 1067292474 ecr 59343227], length 36
17:04:27.784611 # 此数据包的抓取时间
IP # 通信的协议
172.16.153.1.58933 # 源地址 172.16.153.1 和 源端口 58933
> # 数据包的传输方向
172.16.153.160.22 # 目的地址 172.16.153.160 和 目标端口 22
Flags [P.], seq 1117:1153 这个数据包带有 PUSH 的资料传输标志, 且传输的资料为整体资料的 1117~1153 byte
抓取指定接口从指定ip发来的指定协议的包
$ tcpdump -i eth0 -nn src 192.168.2.3 and icmp
指定抓取某个端口的数据包
tcpdump -i eth0 -nn port 22
观察 tcp 三次握手过程
先监听本地回环接口
$ tcpdump -i lo -nn -c 5
$ 在打开另一个终端,以 ssh 的方式连接 127.0.0.1
$ ssh 127.0.0.1
# 返回到另一个终端观察返回的结果
# 第一步 客户端主动连接,发送带有 SYN 标识的 数据包 Flags [S], seq 3515943501
17:41:12.156587 IP 127.0.0.1.44056 > 127.0.0.1.10051: Flags [S], seq 3515943501, win 43690, options [mss 65495,sackOK,TS val 61459018 ecr 0,nop,wscale 7], length 0
# 第二步 服务端也向客户端发送含有 SYN 标识的数据包 Flags [S.], seq 6548797
# 同时回应 客户端的相应客户端的请求 ack 3515943502 (可以看出这是 加 1 的)
11:27:56.201138 IP 127.0.0.1.10051 > 127.0.0.1.44056: Flags [S.], seq 6548797, ack 3515943502, win 43690, options [mss 65495,sackOK,TS val 61459018 ecr 61459018,nop,wscale 7], length 0
# 第三步 客户端回应确认包
17:41:12.156626 IP 127.0.0.1.44056 > 127.0.0.1.10051: Flags [.], ack 1, win 342, options [nop,nop,TS val 61459018 ecr 61459018], length 0
# 开始传输数据
17:41:12.157131 IP 127.0.0.1.44056 > 127.0.0.1.10051: Flags [P.], seq 1:64, ack 1, win 342, options [nop,nop,TS val 61459018 ecr 61459018], length 63
示例
-
tcpdump -i eth0 -nn
抓取网口eth0的所有包并直接以 IP 及 port number 显示,而非主机名与服务名称 -
tcpdump '(src 192.168.140.3 or dst 192.168.140.3)' and port 22 -nn
抓取与ip192.168.140.3的22端口有关的包 这里需要注意,如果逻辑比较复杂,需要用到括号,那就需要把括号用单引号引起来 -
tcpdump host 192.168.140.3 and port 22 -nn
与上面那一条效果相同 -
tcpdump -i any 'ip6 and (src 2001:db8:0:123::13 or dst 2001:db8:0:123::13)'
抓取所有网络接口上发送或接收的 IPv6 数据包,其中源地址或目标地址为2001:db8:0:123::13 -
tcpdump -i eth0 port 80
捕获特定端口(例如 80)上的数据包 -
tcpdump host 192.168.1.100 and host 8.8.8.8
捕获特定主机(例如 192.168.1.100)与特定目标主机(例如 8.8.8.8)之间的数据包 -
tcpdump src host 192.168.1.100 or dst host 192.168.1.100
捕获源地址或目标地址为特定 IP 地址(例如 192.168.1.100)的数据包 -
tcpdump icmp
捕获特定协议(例如 ICMP)的数据包 -
tcpdump -s 1500
捕获指定长度的数据包(例如 1500 字节) -
tcpdump -c 10
捕获指定数量的数据包(例如 10 个) -
tcpdump -w capture.pcap
将捕获的数据包保存到文件中 -
tcpdump -r capture.pcap
从文件中读取数据包 -
tcpdump -vv -i eth0 tcp
捕获指定网络接口上的 TCP 数据包,并显示详细信息 -
tcpdump -vv -i eth0 udp
捕获指定网络接口上的 UDP 数据包,并显示详细信息
本文来自博客园,作者:厚礼蝎,转载请注明原文链接:https://www.cnblogs.com/guangdelw/p/17975153
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)