Skip to content

Latest commit

 

History

History
129 lines (118 loc) · 4.08 KB

tcpdump.md

File metadata and controls

129 lines (118 loc) · 4.08 KB

tcpdump

经典的网络抓包工具

  • 官网地址:tcpdump
  • 切记:用root身份使用此工具

默认输出信息

默认情况下,抓取eth0端口

19:10:54.150404 IP 192.168.1.103.52482 > 115.239.211.92.http: Flags [.], ack 1, win 229, length 0

不加任何选项的时候,其输出信息的各个字段的含义是:

  • 时间戳
  • ID号
  • 网络层协议类型(IPIP6
  • 数据发送方主机名(IP.端口)
  • 数据接收方主机名(IP.端口)
  • 运输层协议概要

TCP协议信息

Flags

TCP报文首部有6位的flag字段,表示6种不同的标识:

  • U:URGgent 带外(紧急)数据,应进行传送,最高优先级
  • A:ACKnowlegment 确认标识
  • P:PuSH 推送,无需等待缓冲区填满,就理解发送
  • R:ReSeT 该标识为1的时候,表明TCP出现严重差错,必须释放连接
  • S:SYNchronization 同步序列号
  • F:FINis 正常释放一个连接
  • .:未设置任何标识

seq

seq 352:704

表示发送的其实序列号为352,发送的最后一个序列号为703(704-1),704是接下来ack返回的值。这个数据包的长度是352(352~703)

seq 352

这样的数据报表示发送的起始序列号为352,但实际发送的长度为0

ack

确认号。表示希望收到的下一个数组包的起始序号

win

接收窗口

options

选项

length

数据包的长度

常用选项

选项 描述
-a 将IP地址和广播地址转变成名字
-A 以ASCII形式显示数据包内容
-c 在收到指定数量的数据包后,tcpdump就会停止
-d 将匹配信息包的代码以人们能够理解的汇编格式给出
-dd 将匹配信息包的代码以c语言程序段的格式给出
-ddd 将匹配信息包的代码以十进制的形式给出
-D 显示网卡设备
-e 打印数据链路层的头部信息
-F 从指定文件读取表达式,忽略其他表达式
-i 抓取特定网卡的流量,如-i eth0
-n 用IP地址表示主机,用数字表示端口号
-r 读取由-w选项抓取的包文件
-t 不显示时间戳
-tt 输出非格式化的时间戳,如1430312629.265789
-ttt 输出本行和前面一行之间的时间
-v 显示详细信息
-v 显示比-v更详细的信息
-w 将数据包写入文件-w cap.log
-X 用十六进制和ASCII码输出数据报详细信息

-d/-dd/-ddd

待整理

-n

用IP地址表示主机,而不是主机名;用数字表示端口号,而不是服务名称

192.168.1.103.52482 > 115.239.211.92.http
192.168.1.103.52482 > 115.239.211.92.80 //-n 选项

Linux中凡是涉及IP地址的工具,只要加上-n选项就不进行反解,比如netstat

反解:指根据IP地址去查询主机名/域名

表达式

tcpdump的表达式支持正则,此外它还具有几种关键字

类型关键字

  • host:主机名(或IP地址)
  • net :CIDR方法表示的网络地址。如tcpdump net 1.2.3.0/24
  • gateway:指定网关
  • port:端口号
  • portfange:端口范围。如tcpdump portrange 1-1024

协议关键字

指定要抓取数据报的协议类型:tcp、udp、icmp、arp、rarp、fddi

方向关键字

  • src:指定数据包的发送端
  • dst:指定数据报的目的端

比较关键字

  • greater:tcpdump greater 1000只抓取大于1000字节的流量
  • less:tcpdump less 10

逻辑关键字

  • and(&&
  • or(||
  • not(
tcpdump src 192. or src 192
tcpdump not port 80

如果表达式比较复杂的时候,可以用括号()括起来,但是需要/转义。或者用单引号' '来扩住,就可以不用转义

tcpdump 'dst 10.0.2.4 and (src 192.1.1.103)'

高级用法

tcpdump还允许直接使用数据包中的指定字节的内容来过滤数据包。

tcpdump 'tcp[13] &2 !=0'
tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0'

高级示例

tcpdump 'gateway snup and ip[2:2] > 576'
tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'
tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'