专业的编程技术博客社区

网站首页 > 博客文章 正文

linux工具命令 tcpdump 案例介绍

baijin 2024-12-16 11:17:59 博客文章 9 ℃ 0 评论

一:tcpdump的输出结果介绍

tcpdump -i eth0 -e -nn -X -c 2 'port 1111' 所截获包内容如下:

第一行:“tcpdump: verbose output suppressed, use -v or -vv for fullprotocol decode”

提示使用选项-v和-vv,可以看到更全的输出内容。

第二行“listening on eth0, link-type EN10MB (Ethernet), capture size 65535bytes”

我们监听的是通过eth0这个NIC设备的网络包,且它的链路层是基于以太网的,要抓的包大小限制是65535字节。包大小限制值可以通过-s选项来设置。

第三行”12:40:33.569037 00:19:e0:b5:10:94 > 00:1a:a0:31:39:d4, ethertypeIPv4 (0x0800),”

12:40:33.569037 分别对应着这个包被抓到的“时”、“分”、“秒”、“微妙”。

00:19:e0:b5:10:94 > 00:1a:a0:31:39:d4 表示MAC地址00:19:e0:b5:10:94发送到MAC地址为00:1a:a0:31:39:d4的主机,ethertype IPv4 (0x0800)表示

Ethernet帧的协议类型为ipv4(即代码为0x0800)。

第四行”length 66: 210.45.123.249.27236 > 172.16.0.11.1111: Flags [S],seq 1624463808,

length 66表示以太帧长度为66。 210.45.123.249.27236表示这个包的源IP为210.45.123.249,源端口为27236,’>’表示数据包的传输方向, 172.16.0.11.1111,

表示这个数据包的目的端ip为172.16.0.11,目标端口为1111,1111端口是我的一个web服务器监听端口。Flags是[S],表明是syn建立连接包(即三次握手的第一次

握手),seq1624463808 序号为1624463808,这个其实就是TCP三次握手的第一次握手:client(210.45.123.249)发送syn请求建立连接包。

第五行” win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0”

win 8192 表示窗口大小为8192字节。options[mss 1460,nop,wscale 2,nop,nop,sackOK]为tcp首部可选字段mss 1460表示mss是发送端(客户端)通告的最大

报文段长度,发送端将不接收超过这个长度的TCP报文段(这个值和MTU有一定关系)。nop是一个空操作选项, wscale指出发送端使用的窗口扩大因子为2, sackOK

表示发送端支持并同意使用SACK选


二:tcpdump flag

1.下面这条命令就是查看80端口的访问量,进行排序,取前20位

tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr |head -20

2.抓取SQL内容

tcpdump -i eth0 -c 100000 -s 0 -A -nnn 'dst 10.30.80.220 and port 3306 and tcp[13]&8!=0' -w 3306.txt

3.flag说明

tcp数据报头,有8位标识位部分

CWR | ECE | URG | ACK | PSH | RST | SYN | FIN

- 显示所有的URG包

# tcpdump 'tcp[13] & 32!=0'

- 显示所有的ACK包

# tcpdump 'tcp[13] & 16!=0'

- 显示所有的PSH包

# tcpdump 'tcp[13] & 8!=0'

- 显示所有的RST包

# tcpdump 'tcp[13] & 4!=0'

- 显示所有的SYN包

# tcpdump 'tcp[13] & 2!=0'

- 显示所有的FIN包

# tcpdump 'tcp[13] & 1!=0'

- 显示所有的SYM/ACK包

# tcpdump 'tcp[13]=18'

过滤器之所以能找到各种类型的包是因为tcp[13]观察的是tcp首部偏移量为13的位置(tcp的标志位为TCP报文的第13个字节),&后面的数字 是字节中的位,不等于0代表该位被打开

3.抓指定tcp标识的包的方法

- 用tcpflags选项(表示TCP报文中标志位字节的偏移量 )抓取tcp标识

# 'tcp[tcpflags] = tcp-syn' //匹配只有syn标志设置为1的 tcp报文

# 'tcp[tcpflags] & (tcp-syn |tcp-ack |tcp-fin) !=0' //匹配含有syn,或ack或fin标志位的TCP报文

TCP中标志位字节的值可以是:

tcp-fin, tcp-syn, tcp-rst, tcp-push, tcp-ack, tcp-urg


Flags值说明:

FIN: "finished"简写。表示发送者以及发送完数据。通常用在发送者发送完数据的最后一个包中。

SYN: "Synchronisation"简写。表示三次握手建立连接的第一步,在建立连接时发送者发送的第一个包中设置flag值为SYN。

RST: "reset"简写。重置连接标志,用于重置由于主机崩溃或其他原因而出现错误的连接。或者发送包发送到一个不是期望的目的主机时,接收端发送reset 重置连接标志的包。

PSH: "push"简写。通知接收端处理接收的报文,而不是将报文缓存到buffer中。

ACK: "Acknowledgment"简写。表示包已经被成功接收。

URG: "urgent"简写。通知接收端处理在处理其他包前优先处理接收到的紧急报文(urgent packets)。详见RFC6093。

ECE: "ECN-Echo"简写。ECN表示Explicit Congestion Notification。表示TCP peer有ECN能力。详见RFC3168。

CWR: "Congestion Window Reduced"简写。发送者在接收到一个带有ECE flag包时,将会使用CWR flag。 详见RFC3168。

NS: "nonce sum"简写。该标签用来保护不受发送者发送的突发的恶意隐藏报文的侵害。详见 RFC 3540

4.使用tcpdump抓取响应flag值得报文

因为TCP Flags 位于TCP头的第14个字节中。所有可以通过如下命令进行抓取:

抓取FIN包: tcpdump -i eth0 "tcp[13] & 1" -ennnv

抓取SYN包: tcpdump -i eth0 "tcp[13] & 2" -ennnv

抓取RST包: tcpdump -i eth0 "tcp[13] & 4" -ennnv

抓取PSH包: tcpdump -i eth0 "tcp[13] & 8" -ennnv

抓取ACK包: tcpdump -i eth0 "tcp[13] & 16" -ennnv

抓取URG包: tcpdump -i eth0 "tcp[13] & 32" -ennnv

因此第13个八位组结构为

- - + + + + + +

前面2个是保留的,都为0,后面的6个根据不同情况有不同值,例如syn 包 则为

00 0 0 0 0 1 0

这是二进制转化为十进制就是2

因此 tcpdump -ni eth0 tcp[13]==2 就表示syn包

同理,syn+ack包为

00 0 1 0 0 1 0

化为十进制就是18,因此tcpdump -ni eth0 tcp[13]==18 表示syn+ack包

如果想同时抓syn和syn+ack包,则进行tcp[13]位值与掩码进行与运算:

tcp[13] & 2 == 2

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表