tcpdump 抓包 mysql 验证三次握手
TCP
的三次握手、4 次挥手是老生常谈的东西,那么具体的包数据传输过程你是否真正的试过呢?我们今天就通过具体的 mysql
建联实践来看看是怎么传递数据包的。
网络嗅探器和 tcpdump
在共享式的网络中,数据的传输是怎么完成的呢?又是怎么找到对应的机器来进行数据交互的呢?
一般来说,在网络中,信息报会广播到网络中所有主机的网络接口,主机的网络设备通过 IP 和 MAC 地址等信息判断该信息包是否应该接收,通过抛弃与自己无关的数据包,这样就达到互联网中我们与指定机器通信的目的。
但是在众多的黑客技术中,嗅探器 (sniffer)
是一种很常见的技术,它使主机的网络设备接收所有到达的信息包,从而达到网络监听的目的。在共享式的局域网中,嗅探器可以对该网络中的流量一览无余。除了黑客,网络管理员也应该学会使用嗅探器来随时掌握网络的使用情况,在网络性能急剧下降时,找到网络阻塞和问题的根源。
具体的嗅探器工具在 Windows
平台上有 netxray
和 sniffer pro
软件,在 Linux
平台上有 tcpdump
。我们今天要介绍的就是 tcpdump sniffer
嗅探器工具。
安装 tcpdump
tcpdump
是 Linux
平台一个以命令行方式运行的网络流量检测工具,它能截获网卡上收到的数据包,并通过一定的配置来完成对内容的解析和分析。
检测系统中是否已经安装了 tcpdump
的方法非常简单,就是直接执行:
1 | $ tcpdump |
最新的 tcpdump
源码下载地址:http://www.tcpdump.org (tcpdump 官网)
tcpdump
的运行需要pcap
的支持,请同时下载这两个内容并安装,一般最新版本的两者是互相兼容的。
笔者本次下载的是最新的版本,直接在命令行里使用 wget 下载即可:
1 | # 下载 tcpdump 文件 |
安装完成后跟上面一样输入 tcpdump
判断是否成功安装了:
1 | $ tcpdump |
tcpdump
的命令行参数和过滤规则
tcpdump
是个命令行方式的网络嗅探器,如果不使用任何参数,会持续捕获所有的网络请求内容,无法有效分析,可以针对自己的需求使用合适的参数。
1 | # 查看所有的参数内容 |
常用的参数含义:
-a
将网络地址转变为易识别的主机名(默认)-n
不将网络地址转变为易识别的主机名,即直接显示 IP 地址,可以省略 DNS 查询-nn
不进行端口名称的转换-t
不显示时间戳-tttt
输出由 date 处理后的时间戳-c
捕获指定数量的数据包后退出-e
显示数据链路层的头部信息,即 MAC 地址信息:00:8c:fa:f3:e3:04 (oui Unknown) > 00:e0:ec:3e:8d:39 (oui Unknown), ethertype IPv4 (0x0800), length 71
-f
将目标的 internet 地址以 IP 形式展示-i
监听指定的网络接口-S
将 tcp 的序号以绝对值形式输出,而不是相对值-r
从指定文档中读取数据包-w
不分析和输出,将截获的数据包写入指定文档-T
将截获的数据包按指定类型报文解析,如:cnfp/rpc/rtp/snmp/vat/wb
-F
从指定文档读取过滤规则,忽略命令行的其他参数指定的过滤规则-v
输出较详细的信息,如 IP 包的 TTL 和协议类型-vv
输出详细的信息-l
将标准输出转变为行缓冲方式-d
将上次捕获的信息包以汇编格式显示-dd
将上次捕获的信息包以 C 语言格式显示-ddd
将上次捕获的信息包以十进制格式显示
除了参数之外,更重要的是过滤表达式,包含三个类型关键字:
host: 10.10.13.15
监听的主机net: 10.10.0.0
监听的网络port: 21
监听的端口
四个截获方向关键字:
dst: 10.10.13.15
目标主机src: 10.10.0.0
源网络dst and src
dst or src
(缺省值)
多个协议关键字:ether/fddi/tr/ip/ip6/rarp/decnet/tcp/udp
。
还支持组合表达式:not/!/and/&&/or/||
。
举几个常用的例子:
1 | # 只捕获指定 IP 的数据包 |
实例测试
这个实例是 A 机器
(client)
向 B 机器(server)
发起mysql
实例连接,并立刻exit
的场景。
步骤:
- A 机器启动嗅探器:
tcpdump host 10.92.143.15 -tttt -S -nn
- A 机器执行
mysql -u root -h 10.92.143.15 -p
- A 机器数据库连接成功后,立刻
exit;
退出mysql
实例连接
报文:
1 | # 三次握手,其中 S 代表 Syn,. 代表 Ack,S. 代表 Syn, Ack |
具体的
mysql
通信内容可以查看这篇文章:https://jin-yang.github.io/po…