这是一个目录
- 一、什么是tcpdump
- 二、为什么要用tcpdump
- 三、tcpdump在哪里?
- 四、怎么用tcpdump?
- 4.1 命令格式
- 4.2 常用选项
- 4.2.1 对网络接口抓包 -i
- 4.2.2 指定收取数据包的数量 -c
- 4.2.3 不把ip转换成域名,直接显示ip -n
- 4.2.4 显示ip和端口号 -nn
- 4.2.5 在每行的输出中,不显示时间 -t
- 4.2.6 产生详细的输出 -v
- 4.2.7 指定数据包的大小 -s
- 4.2.8 显示所有可用的网络接口 -D
- 4.2.9 将捕获信息保存到文件中,且不分析核打印在屏幕上 -w
- 4.3 过滤规则
- 4.3.1 基于ip地址/网段过滤
- 4.3.2 基于端口过滤
- 4.3.3 基于协议
- 五、实例
一、什么是tcpdump
tcpdump是一个抓包工具,用于实时捕获和分析网络流量。它通常在Unix和类Unix操作系统上可用,包括Linux。
tcpdump能够捕获流经网络接口的数据包,并显示或保存它们以供进一步分析。它提供有关每个数据包的详细信息,包括源IP地址、目标IP地址、使用的协议、数据包时间戳、数据包大小等等。
tcpdump通过使用各种过滤器,以捕获特定类型的流量,例如仅捕获特定IP地址、端口或协议的数据包。
二、为什么要用tcpdump
-
调试和故障排查:通过捕获和查看实时的网络数据包流量,来观察和分析数据包,找到故障所在;
-
网络流量分析:通过捕获网络数据包,分析数据包的详细信息,来理解网络通信模式、检测潜在安全问题或优化网络性能。
-
安全监测和入侵检测:捕获和分析数据包,来检查网络中的异常流量、恶意软件传播、潜在的攻击尝试等;
-
协议分析和开发: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
端口范围 80 到 8080 之间
#可结合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协议的包
五、实例
- 如何抓取源地址为192.168.2.100,目的地址192.168.2.102的数据流?
思路:抓取范围地址,用and链接
tcpdump -i ens33 src 192.168.2.100 and dst 192.168.2.102
#and 很关键
- 怎么使用tcpdump查看网卡?
tcpdump -D
- 监听来自主机10.0.0.100在端口22上的TCP数据包
tcpdump tcp port 22 and src host 10.0.0.100
- 10.0.0.101和除了10.0.0.1之外的主机之间的通信
tcpdump ip host 10.0.0.101 and ! 10.0.0.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分析