找回密码
 立即注册
搜索
热搜: SDN 云计算 H3C
查看: 3228|回复: 0

[CentOS] tcpdump常用命令整理(一)

[复制链接]

57

主题

13

精华

8

回帖

管理员

体力
314 卡
贡献
161 个
金币
256 枚
注册时间
2018-8-25
最后登录
2025-3-1

活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老最佳新人

发表于 2020-7-17 19:41:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
tcpdump基本使用

tcpdump默认只抓取一个包的前68或96个字节,如果要查看更多内容,需要加"-s number"选项,下面是我最常用的选项:

【选项option】
  • -i any  监听所有的网卡接口、用来查看是否有网络流量
  • -i   eth0 只监听eth0网卡流量
  • -D   显示可用的接口列表
  • -n   不解析成主机名(协议端口会以协议名进行显示,不显示实际端口),本地IP地址会以主机名形式显示 (参数可以连写,比如:-nX
  • -nn  不解析成主机名和端口,会以实际IP和端口号进行显示。
  • -q   显示简化输出
  • -t    显示可读的时间戳
  • -A   将封包内容以ASCII显示,通常用来捕获www网页封包的资料
  • -x  将封包以十六进制显示每一个报文 (去掉链路层报头后) ,只会以十六进制形式显示网络层及以上字段的内容,不包含数据链路层。
  • -xx   与 -x 类似,-x默认不会以十六进制形式显示数据链路层字段,直接从网络层包头开始显示;-xx表示在十六进制显示中增加以太网header的显示,即会以十六进制形式从数据链路层开始显示。
  • -e   获取以太网头(数据链路层头),添加此参数后,解析的信息中会显示数据链路层信息。与-xx的区别,-xx指的是以十六进制显示,而-e会在解析的明文信息前添加数据链路层信息,比如MAC等信息。
  • -v -vv -vvv  显示更加多的包信息
  • -c   只读取指定数量的包,例:-c10 即只读10个包, 然后tcpdump停止
  • -s   指定每个包捕获的长度、单位是 byte, 可以使用 -s0 捕获整个包
  • -S   输出绝对的序列号
  • -w  将捕获的数据包信息写入文件
  • -r   加载之前保存的文件(读取抓包文件:tcpdump -r file.pcap)

【常用方式】

# tcpdump -xnn -r    aaa.pcap            //通过此命令可以将抓包文件以16进制格式显示网络层及以上报文信息(不含数据链路层包头)。
# tcpdump -xxnn -r aaa.pcap             //通过此命令可以将抓包文件以16进制格式显示,会从从链路层包头开始显示。
# tcpdump -enn -r aaa.pcap              //通过此命令可以在明文解析信息中显示数据链路层信息。

【tcpdump -xr与wireshark显示效果的区别】
(1)tcpdump -x在以16进制显示数据包内容时,默认是从报文的网络层开始显示,不包括数据链路层(-x参数介绍中有描述),可以通过-e参数强制显示数据链路层。
(2)wireshark软件默认会在界面下方显示16进制报文内容,但该软件是从数据链路层开始显示,所以同一个报文在通过两种方式对比时,会发现wireshark软件中前面会多14个字节的数据链路层(前28个十六进制数),如图:
批注 2020-07-21 160253.jpg

【tcpdump支持的正则表达式】
  • 与:and 或 &&
  • 或:or 或 ||
  • 非:not 或 !(后面记得加空格
  • 括号:""
例如:tcpdump -vnn -i any  " "host 192.168.99.254" or "tcp port 23" "and icmp

【表达式】
在tcpdump中可以使用表达式过滤指定类型的流量:
  • 类型type选项包含:host  net port
  • 方向dir包含:src  dst
  • 协议proto选项包含:tcp udp ah等

【示例】

捕获所有流量
tcpdump -i any
指定网卡接口、查看指定网卡发生了什么
tcpdump -i eth0
原生输出、不解析主机、端口、显示绝对序列号、可读的时间戳
tcpdump -ttttnnvvS
查看指定ip的流量
tcpdump host {ip}
使用源和目的过滤
tcpdump src {source ip}
tcpdump dst {dest ip}
过滤某个子网的数据包
tcpdump net 1.2.3.0/24
过滤指定端口相关的流量
tcpdump port {port}
tcpdump src port {port} -> 只显示发出
过滤指定协议的流量
tcpdump tcp
只显示ipv6流量
tcpdump ip6
基于包大小过滤流量
tcpdump less 32
tcpdump grater 64
tcpdump <=128
使用端口范围过滤
tcpdump portrange 21-23
保存到指定文件
tcpdump port 80 -w file
加载之前保存的文件
tcpdump -r file

【高级使用】

  • AND: and or &&
  • OR: or or ||
  • except: not or !
过滤指定源和目的端口
tcpdump -n src 1.1.1.2 and dst port 8080
过滤指定网络方向
tcpdump -n src net 1.1.1.2/16 and dst net 1.1.1.3/16
过滤到指定ip的非icmp报文
tcpdump dst 1.1.1.2 and src net and not icmp
构建规则过于复杂的时候、可以使用单引号将规则放到一起
tcpdump 'src 1.1.1.1 and (dst port 80 or 22)'

【隔离指定的TCP标识】

tcp[13]表示在tcp header中的偏移位置13开始、后边代表的是匹配的字节数
显示所有的urgent包(URG)
tcpdump 'tcp[13] & 32!=0'
显示所有的ACK包
tcpdump 'tcp[13] & 16!=0'
显示所有的push包
tcpdump 'tcp[13] & 8!=0'
显示所有的reset包
tcpdump '[tcp13] & 4!=0'
显示所有的SYN包
tcpdump '[tcp13] & 2!=0'
显示所有的FIN包
tcpdump '[tcp13] & 1!=0'
显示所有的SYN/ACK包
tcpdump 'tcp[13]=18'

【识别重要流量】

过滤同时设置SYN和RST标识的包(这在正常情况下不应该发生)
tcpdump 'tcp[13] = 6'
过滤明文的HTTP GET请求
tcpdump 'tcp[32:4] = 0x47455420'
通过横幅文本过滤任意端口的SSH连接
tcpdump 'tcp[(tcp[12]>>2):4] = 0x5353482D'
过滤TTL小于10的包(通常情况下是存在问题或者在使用traceroute)
tcpdump 'ip[8] < 10'
过滤恶意的包
tcpdump 'ip[6] & 128 != 0'

【理解报文内容】

08:41:13.729687 IP 192.168.64.28.22 > 192.168.64.1.41916: Flags [P.], seq 196:568, ack 1, win 309, options [nop,nop,TS val 117964079 ecr 816509256], length 37208:41:13.729687 本地时间戳
ip 协议是ipv4、若是ipv6会显示为 ip6
192.168.64.28.22 源ip和端口
192.168.64.1.41916 目的ip和端口
Flags [P.] 报文标记段
seq 196:568 代表该数据包包含该数据流的第 196 到 568 字节
ack 1 该数据包是数据发送方,ack 值为 1。在数据接收方,该字段代表数据流上的下一个预期字节数据,例如,该数据流中下一个数据包的 ack 值应该是 568
win 309 表示接收缓冲区中可用的字节数,后跟 TCP 选项如 MSS(最大段大小)或者窗口比例值
length 372 代表数据包有效载荷字节长度
【flag描述】
Flag字段 含义 描述
S
SYN Connection Start
F
FIN Connection Finish
P
PUSH Data Push
.
ACK Acknowledment





您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表