Tcpdump
选项
-i [interface] #指定入站网卡
-n #不将地址转换为域名,端口转换为协议
-nn #不将协议和端口号等转换为名称
-v #繁琐的输出. 显示 IP 数据报 中的 生存周期 和 服务类型.
-q #简要的输出,仅显示时间、源Ip、目标ip、协议、端口、包大小
-c [count] #指定抓取的包数量
-w [filename] #将包数据输出至文件(二进制文件,只能用-r选项阅读),使用wareshark软件也可
#yum -y install wareshark*
-r [filename] #阅读-w选项输出的包文件
dst host [hostname] #指定目标主机
src host [hostname] #指定来源主机,ip和域名均可
dst net [network] #指定目标网段/24或ip
src net [network] #指定来源网段/24或ip
port [port] #指定端口,不管是目标端口还是来源
dst port [port] #指定目标端口
src port [port] #指定来源端口
greater length #筛选大于length的数据包
基本用法
#打印从主机A中发出和收到的数据
tcpdump host A
#打印主机A和B之间或和c之间得来往数据包
tcpdump host A and \(B or C)
#打印主机A和主机B之外的所有主机之间的同行
tcpdump host A and not B
#打印不是本地网络得数据包
tcpdump ip and not net localnet
~~~powershell
tcpdump -i ens33 -nv
tcpdump -i ens33 -nv -c 100
tcpdump -i ens33 -nv -w /file1.tcpdump
tcpdump -nnv -r /file1.tcpdump
主机、端口、网段为条件
tcpdump -i ens33 -nq not port 80
tcpdump -i ens33 -nq port 80
tcpdump -i ens33 -nq net 192.168.112.0/24
tcpdump -i ens33 -nq host 192.168.112.70
tcpdump -i ens33 -nq dst port 22
tcpdump -i ens33 -nq src port 22
协议为条件
tcpdump -i ens33 -nv arp
tcpdump -i ens33 -nv icmp
tcpdump -i ens33 -nv udp udp协议
tcpdump -i ens33 -nv tcp tcp协议,三次握手及四次断开
tcpdump -i ens33 -nv ip ip协议
tcpdump -i ens33 -nv vrrp keepalived使用协议
多条件,与或非
tcpdump -i ens33 -nnv not net 192.168.112.0/24
tcpdump -i ens33 -nnv not port 80
tcpdump -i ens33 -nnv host 192.168.112.80 and port 22
tcpdump -i ens33 -nnv host 192.168.112.80 and host 192.168.112.70
tcpdump -i ens33 -nnv host 192.168.112.80 or host 192.168.112.70
tcpdump -i ens33 -nnv \( host 192.168.112.80 and port 22 \) or \( host
192.168.112.70 and port 80 \)
tcpdump -i ens33 -nnv host 192.168.112.10 and port 22 or port 80
tcpdump -i ens33 -nnv host 192.168.112.10 and \( port 22 or port 80\)
tcpdump -i ens33 -nnv host 192.168.112.10 and port 80
tcpdump -i ens33 -nnv host 192.168.112.10 and ! port 80
tcp头部信息
由上图可知下面抓包的意思
man tcpdump
tcpdump -i ens33 -nnv tcp[13]==2
|C|E|U|A|P|R|S|F|
|--------------- |
|0 0 0 0 0 0 1 0 |
|--------------- |
|7 6 5 4 3 2 1 0|
tcpdump -i ens33 -nnv tcp[13]==2 and port 22 -w ssh-conn.tcpdump
tcpdump -i ens33 -nnv tcp[13]==18
|C|E|U|A|P|R|S|F|
|--------------- |
|0 0 0 1 0 0 1 0 |
|--------------- |
|7 6 5 4 3 2 1 0|
tcpdump -i ens33 -nnv tcp[13]==17
案例解析
上图截取啦一部分ssh连接时的包数据
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
#提示使用-v或者-vv选项可以看到更全的信息
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
#监听的通过ens33这个网卡设备的网络包,网络是基于以太网的,要抓的包大小限制是262144字节。包大小限制可以通过-s选项来设置。
16:46:36.099799 IP 192.168.112.80.58926 > localhost.localdomain.ssh: Flags [S], seq 2224777175, win 29200, options [mss 1460,sackOK,TS val 774004 ecr 0,nop,wscale 7], length 0
# 16:46:36.099799 时、分、秒、微秒
# 192.168.112.80.58926 来源ip和端口
# > 方向
# localhost.localdomain.ssh 访问的本地主机的ssh服务
# Flags [S] 请求建立连接
# seq 2224777175 tcp第一次握手,seq序列号
# win 29200 窗口大小为29200
# options tcp首部可选字段
# mss 1460 发送端通告的最大报文长度,超过这个长度不接受
# sackOK 表示发送端支持并同意使用SACK选
#其他不知
# nop 空操作选项
# wscale 7 wscale指出发送端使用的窗口扩大因子为2
# length 0 以太帧长度为0