一、利用tcpdump和wireshark 抓包方法
1、下载安装wireshark(windows用)
注:可以用wireshark 抓包和分析包
https://www.wireshark.org/
2、安装tcpdump(linux用)
yum install tcpdump -y
3、在数据库服务器上抓数据包(这里抓mysql)
看下连接情况,有的是scoket连接的就无法用这种方法了,只能在数据库日志上做文章了,注意入侵式要考虑是否影响业务
单个端口
tcpdump -i any -s 0 -nnvvX port 3306 -A -w mysql.pcap
多个端口
tcpdump -i any -s 0 -nnvvX 'port 3306 or port 33060' -A -w mysql.pcap
-i any:监听所有网络接口,包括IPv4和IPv6的接口。
-s 0:捕获完整的数据包长度,避免截断数据。
-nnvvX:分别表示不转换主机名和端口名(-n),详细输出(-v),更详细输出(-vv),以及以十六进制和ASCII格式显示数据(-X)。
‘port 3306 or port 33060’:过滤条件,抓取目的或源端口为3306或33060的数据包。
-A:以ASCII格式打印数据包的内容,这对于查看SQL查询文本特别有用。
4、使用wireshark分析包 获取sql语句
wireshark 可以识别mysql 协议,但是有时候我们会使用代理如haproxy 需要更改下协议
ctrl+shift+u 打开切换协议
5、补充其他数据库说明
(1)sqlserver wireshark 抓取
同样的方法用wireshark直接抓取
(2)sqlserver 使用 profiler 抓取sql
(3)oracle抓取
tcpdump -i any -s 0 -nnvvX port 1521 -A -w oracle.pcap
这里复制为16进制的数据
0000 ec 01 01 00 00 00 01 00 00 00 03 5e ed 69 80 00 …^.i…
0010 00 00 00 00 00 01 84 00 00 00 01 0d 00 00 00 01 …
0020 01 00 00 00 00 00 00 00 00 00 00 00 00 01 01 00 …
0030 00 00 00 01 00 01 01 01 00 00 00 00 00 00 00 00 …
0040 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …
0050 2c 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20 74 ,select * from t
0060 6b 74 5f 63 68 65 63 6b 64 65 74 61 69 6c 20 77 kt_checkdetail w
0070 68 65 72 65 20 69 64 20 3d 20 3a 49 44 01 00 00 here id = :ID…
0080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …
0090 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 …
00a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …
00b0 00 02 03 00 00 15 00 00 00 00 00 00 00 00 00 00 …
00c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 07 05 …
00d0 c4 1b 1b 09 1d …
这样就可以得到sql了,不好解析的话扔ai里就把sql弄出来了