一、什么是tcpdump

tcpdump是一个抓包工具,用于实时捕获和分析网络流量。它通常在Unix和类Unix操作系统上可用,包括Linux。

tcpdump能够捕获流经网络接口的数据包,并显示或保存它们以供进一步分析。它提供有关每个数据包的详细信息,包括源IP地址、目标IP地址、使用的协议、数据包时间戳、数据包大小等等。

tcpdump通过使用各种过滤器,以捕获特定类型的流量,例如仅捕获特定IP地址、端口或协议的数据包。

二、为什么要用tcpdump

  1. 调试和故障排查:通过捕获和查看实时的网络数据包流量,来观察和分析数据包,找到故障所在;

  2. 网络流量分析:通过捕获网络数据包,分析数据包的详细信息,来理解网络通信模式、检测潜在安全问题或优化网络性能。

  3. 安全监测和入侵检测:捕获和分析数据包,来检查网络中的异常流量、恶意软件传播、潜在的攻击尝试等;

  4. 协议分析和开发:Tcpdump提供了深入了解网络协议工作原理和通信模式的机会。

三、tcpdump在哪里?

yum install -y tcpdump #安装tcpdump,或者更新版本

在这里插入图片描述

rpm -qc tcpdump #查看详细信息

在这里插入图片描述

which tcpdump 

在这里插入图片描述

四、怎么用tcpdump?

4.1 命令格式

#命令格式
tcpdump    option   proto     dir         type
           选项      协议      数据的方向    抓取的数据类型

##proto(协议)##    
1. tcp  udp   icmp
2. ip   ipv6
3. arp


##dir(方向)##
1. src
2. dst
3. src and   dst

#type(类型)##
1. host  主机   
2. net  网段
3. port  端口     
4. port range  端口范围

tcpdump [-adeflnNOpqStvx][-c<数据包数目>][-dd][-ddd][-F<表达文件>][-i<网络界面>][-r<数据包文件>][-s<数据包大小>][-tt][-T<数据包类型>][-vv][-w<数据包文件>][输出数据栏位]

#选项(option)#
-a 尝试将网络和广播地址转换成名称。
-c<数据包数目> 收到指定的数据包数目后,就停止进行倾倒操作。
-d 把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出。
-dd 把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出。
-ddd 把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出。
-e 在每列倾倒资料上显示连接层级的文件头。
-f 用数字显示网际网络地址。
-F<表达文件> 指定内含表达方式的文件。
-i<网络接口> 使用指定的网络截面送出数据包。
-l 使用标准输出列的缓冲区。
-n 不把主机的网络地址转换成名字。
-N 不列出域名。
-O 不将数据包编码最佳化。
-p 不让网络界面进入混杂模式。
-q 快速输出,仅列出少数的传输协议信息。
-r<数据包文件> 从指定的文件读取数据包数据。
-s<数据包大小> 设置每个数据包的大小。
-S 用绝对而非相对数值列出TCP关联数。
-t 在每列倾倒资料上不显示时间戳记。
-tt 在每列倾倒资料上显示未经格式化的时间戳记。
-T<数据包类型> 强制将表达方式所指定的数据包转译成设置的数据包类型。
-v 详细显示指令执行过程。
-vv 更详细显示指令执行过程。
-x 用十六进制字码列出数据包资料。
-w<数据包文件> 把数据包数据写入指定的文件。

4.2 常用选项

4.2.1 对网络接口抓包 -i

在这里插入图片描述

第一部分

12:59:42.256994
#数据包时间 时:分:秒.毫秒

第二部分

IP 192.168.2.1.58879 > byyb.ssh
#详解#
IP 192.168.2.1.58879
#发送方IP地址.端口号  ip地址:192.168.2.1     端口号:47496     
>
# >表示数据流向
byyb.ssh
#主机名.协议    主机名:byyd     协议:ssh

第三部分

 Flags [P.], seq 37:73, ack 417040, win 3817, length 36

#详解#
Flags [P.]: TCP 数据包的标志字段。"[P.]" 表示该数据包携带了数据(Push 标志),并且是由发送方发起的。

seq 37:73: 该数据包的序列号范围。这个范围从序列号 37 开始,到序列号 73 结束。

ack 417040: 确认号(ACK)。表示发送方期望接收到的下一个字节的序列号。

win 3817: 窗口大小(Window Size),表示接收方的可用缓冲区大小。

length 36: 该数据包的长度,单位为字节。

4.2.2 指定收取数据包的数量 -c

tcpdump -i ens33 -c 2 #只抓两个数据包

在这里插入图片描述

4.2.3 不把ip转换成域名,直接显示ip -n

tcpdump -i ens33 -n #直接显示ip地址

在这里插入图片描述

4.2.4 显示ip和端口号 -nn

tcpdump -i ens33 -nn

在这里插入图片描述

4.2.5 在每行的输出中,不显示时间 -t

tcpdump -i ens33 -t

在这里插入图片描述

tcpdump -i ens33 -tt #显示一个时间戳
tcpdump -i ens33 -ttt #每行之间的时间间隔
tcpdump -i ens33 -tttt #显示更详细的时间

在这里插入图片描述

4.2.6 产生详细的输出 -v

tcpdump -i ens33 -v
#v越多,显示的信息越详细
tcpdump -i ens33 -vv
tcpdump -i ens33 -vvv

在这里插入图片描述

4.2.7 指定数据包的大小 -s

tcpdump -i ens33  -s 50 #指定数据包的大小为50

在这里插入图片描述

4.2.8 显示所有可用的网络接口 -D

tcpdump -D

在这里插入图片描述

4.2.9 将捕获信息保存到文件中,且不分析核打印在屏幕上 -w

tcpdump -i any -w test.cap    
#将文件后缀改成cap 或者pcap形式可以直接用wireshark打开

4.3 过滤规则

4.3.1 基于ip地址/网段过滤

host选项

主机2  ping   主机1 

[root@localhost data]#tcpdump -i ens33  host 192.168.91.102
#只过滤 和 192.168.91.100有关的流量

在这里插入图片描述

dst 选项 目的地址
src 选项 源地址

tcpdump -i ens33  dst 192.168.2.102 #过滤出目的地址为192.168.2.102的数据流
tcpdump -i ens33  src 192.168.2.100#过滤出源地址为192.168.2.100的数据流

net 选项 ----过滤网段

tcpdump -i ens33 net 192.168.2.0/24  #过滤192.168.2.0网段的

##控制方向##
tcpdump -i ens33  src net 192.168.2.0/24 #目的网段

tcpdump -i ens33  dst net 192.168.2.0/24#源网段

在这里插入图片描述

4.3.2 基于端口过滤

port 端口号

单端口

tcpdump -i ens33 port 80 #过滤80端口的数据包

or选项 ,用于多个不连续端口
port x or port y ---- 端口x 或 端口y

tcpdump -i ens33  src port 80 or port 22 #过滤出源地址的端口为80或22
tcpdump -i ens33  dst port 80 or port 22 #过滤出目的地址端口为80或22的

portrange 选项 ,用于指定端口范围

portrange x-y---- 端口范围 x到 y之间

#tcpdump -i ens33 portrange 80-8080
端口范围 808080 之间

#可结合src dst
tcpdump -i ens33  src portrange 80-8080  #源地址的端口范围 80-8080

tcpdump -i ens33  dst portrange 80-8080 #目的地址的端口范围为80-8080

在这里插入图片描述

4.3.3 基于协议

协议种类:ip arp icmp tcp udp

应用层协议不可以直接抓取

ping  www.baidu.com

tcpdump -i ens33 icmp #抓取ens33接口的数据包,过滤出基于icmp协议的包

在这里插入图片描述

五、实例

  1. 如何抓取源地址为192.168.2.100,目的地址192.168.2.102的数据流?

思路:抓取范围地址,用and链接

tcpdump -i ens33 src 192.168.2.100 and  dst 192.168.2.102
#and 很关键

在这里插入图片描述

  1. 怎么使用tcpdump查看网卡?
tcpdump -D

在这里插入图片描述

  1. 监听来自主机10.0.0.100在端口22上的TCP数据包
tcpdump tcp port 22 and src host 10.0.0.100
  1. 10.0.0.101和除了10.0.0.1之外的主机之间的通信
tcpdump ip host 10.0.0.101 and ! 10.0.0.1
  1. 综合条件过滤并保存
tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24  -w ./target.cap
#tcpdump 将在指定的网络接口上开始捕获数据包,并根据给定的过滤器条件进行过滤。符合过滤条件的数据包将被保存到 target.cap 文件中
(1)tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型
(2)-i eth1 : 只抓经过接口eth1的包
(3)-t : 不显示时间戳
(4)-s 0 : 抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包
(5)-c 100 : 只抓取100个数据包
(6)dst port ! 22 : 不抓取目标端口是22的数据包
(7)src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24
(8)-w ./target.cap : 保存成cap文件,方便用wireshark分析
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐