tcpdump
# tcpdump
默认输入tcpdump这个命令,它将监听第一个网络接口上所有流过的数据包,如下图:

19:49:18.981276:表示抓包的时间,精确到微秒
IP:表示这是 IPv4 协议的数据包
HKGP.ssh:HKGP是主机名,
.ssh表示源端口是 22>:表示数据包的流向,从
HKGP.ssh发送到后面的目标地址目标地址与端口:.. 表示目标 IP 地址被省略或显示为两个点,可能是因为没有反向解析到主机名,9081 是目标端口。
Flags [P.]:表示 TCP 包头的标志位:
P = PUSH,表示发送方希望接收方尽快将数据推送给应用程序,
. = ACK,表示该包也携带确认号(acknowledgment)。
常见标志组合:
[S]= SYN[P.]= PUSH + ACK[F.]= FIN + ACK[.]= 只有 ACKseq 3800796638:3800796754 :seq 是 TCP 序列号,这里是一个范围 起始值:结束值,
3800796754 - 3800796638 = 116字节(与最后的 length 一致)。ack 270387180:表示该数据包的发送方期望收到的下一个字节的序列号是
270387180(是对之前对方发来数据的确认)。win 166:接收窗口大小,表示发送方当前声明的接收窗口大小(单位是字节),这里是 166 字节。
length 116:数据长度,这里为长度是 116 字节
# 常规过滤规则
# 基于IP地址进行过滤:host
获取特定主机的报文
tcpdump host baidu.com
获取源地址或目标地址为baidu.com的报文
tcpdump dst baidu.com # src代表源地址、dst代表目标地址
获取网段的报文
tcpdump net 192.168.187.0/24
tcpdump net 192.168.187
2
# 基于端口进行过滤:port
获取80端口的报文
tcpdump tcp port 80
tcpdump port 80 or 22
tcpdump portrange 8000-9000 #获取端口范围
2
3
# 基于协议过滤:protocal
一般常用的协议:ip,ipv6,arp,icmp,tcp,udp等
tcpdump icmp
应用层的协议如http,https,ssh,dns不能直接tcpdump http,要
tcpdump port http #或者 tcpdump port 80
# 常用参数
- -i:指定监听网络接口
默认监听在第一块网卡上,监听所有经过此网卡通过的数据包,在 tcpdump 后面加一个 -i 的参数,后面跟具体需要捕获的接口名称,就可以抓取经过这个具体接口的所有数据包。
tcpdump -i eth0
监听所有的网卡接口、用来查看是否有网络流量
tcpdump -i any
- -w:将捕获到的信息保存到文件中,且不分析和打印在屏幕
tcpdump -w test.cap
tcpdump -w test.pcap
或者
tcpdump -i ens17 port ssh > test.txt
2
3
4
- -r:从文件中读取数据,同时可以使用过滤器语法进行过滤分析
tcpdump -r test.cap
- -n:不把ip转换为域名
- -nn:不把协议和端口转换为名字
- -c:指定抓包的次数
tcpdump -c 5
- -C:配合-w使用,检查文件大小是否超过file-size(百万字节),如果超过关闭文件,另创一个文件继续写入
#-C 2 每个文件最大为 2 MB,-W 3最多保留 3 个这样的文件
tcpdump -C 2 -W 3 -w test.cap
2
- -Q:选择数据包的方向
tcpdump -Q in
tcpdump -Q out
tcpdump -Q inout
2
3
- -q:输入更简洁的内容
- -D:显示所有可用网络接口的列表
tcpdump -D
- -L:列出网络接口的已知数据链路
tcpdump -L
- -s:指定抓取到的每个包的大小,单位byte,默认262144bytes
- -A:已ASCII格式打印
tcpdump -A | grep www.baidu.com
- -e:打印出数据链路层的头部信息,可以显示出MAC地址
tcpdump -e
# 逻辑运算符
and也可以用&&
or也可以用||
not也可以用!
2
3