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 数据包,并显示详细信息

posted @ 2024-01-19 17:20  厚礼蝎  阅读(15)  评论(0编辑  收藏  举报