0.前言

MySQL由于开源的原因,有各式各样的中件间Proxy ,极大的丰富了做高可用或迁移的方案,习惯了MySQL生态圈的灵活和便利,Oracle官方不开源代码和协议,没有中间件proxy,显得很笨重。

比如以下的方案就会很不好办

  • 实时抓取Oralce的访问SQL日志
  • 慢日志捕获和收集
  • 高可用中件间Proxy在故障时自动切换
  • SQL访问黑名单。

基于以上的一些困难,打算自己从头写一个兼容MySQL/Oracle的中件间,希望从中件间层同时支持两种数据库。方便我们做数据库的高可用管理和从Oracle到MySQL的迁移。

这个计划是在年前的2021年最后一次组内会议上提出来的构想。元旦放假期间我就一直在想这事怎么搞

问题的难点在于:Oracle的client/server端通信没有文档的说明,没人能说清楚Oracle是怎么交互的

这两天用最原始的方法抓包,一个包一个包的去看,找到包的规律,分析它的通信协议。竟然发现这个方法可行

1.步骤

1.写一个Python脚本去连接(192.168.1.1:1521)上的Oracle


#!/usr/bin/env python
## coding: utf-8
import cx_Oracle

conn = cx_Oracle.connect('dboopreader/dbooppassword@192.168.1.1:1521/testdb')
print("连接成功")
conn.close()
print("连接关闭")

通过wireshark抓包,发现一次简单的连接,有38个通信包。

wireshark抓包

2.捕获这些包,发现它的规律

挨个点开这些包,发现了一些有用的信息,然后发现wireshark的包看起来不方便,
本地模拟一个端口1522端口,劫持这些请求,打印出来,得到如下这种的tcp包

抓到:127.0.0.1到192.168.1.1的包
二进制展示如下:
0.0x7 0xaf 0x0 0x0 0x6 0x0 0x0 0x0 0x0 0x0 0x2 0x54 0x3 0x54 0x3 0x3 0x2a 0x6 0x1 0x1 
20.0x1 0x6f 0x1 0x1 0xc 0x1 0x1 0x1 0x1 0x1 0x1 0x1 0x7f 0xff 0x3 0xe 0x3 0x3 0x1 0x1 
40.0xff 0x1 0xff 0xff 0x1 0xb 0x1 0x1 0xff 0x1 0x6 0xa 0xe2 0x1 0x7f 0x5 0xf 0xf 0xd 0x7 
60.0x2 0x1 0x0 0x0 0x18 0x0 0x7 0x80 0x0 0x0 0x0 0x3c 0x3c 0x3c 0x80 0x0 0x0 0x0 0x0 0x0 
80.0x0 0x20 0xd0 0x7 0x0 0x1 0x0 0x1 0x0 0x1 0x0 0x0 0x0 0x2 0x0 0x2 0x0 0xa 0x0 0x0 
100.0x0 0x8 0x0 0x8 0x0 0x1 0x0 0x0 0x0 0xc 0x0 0xc 0x0 0xa 0x0 0x0 0x0 0x17 0x0 0x17 
120.0x0 0x1 0x0 0x0 0x0 0x18 0x0 0x18 0x0 0x1 0x0 0x0 0x0 0x19 0x0 0x19 0x0 0x18 0x0 0x19 
140.0x0 0x1 0x0 0x0 0x0 0x1a 0x0 0x1a 0x0 0x19 0x0 0x1a 0x0 0x1 0x0 0x0 0x0 0x1b 0x0 0x1b 
160.0x0 0xa 0x0 0x1b 0x0 0x1 0x0 0x0 0x0 0x1c 0x0 0x1c 0x0 0x16 0x0 0x1c 0x0 0x1 0x0 0x0 
180.0x0 0x1d 0x0 0x1d 0x0 0x17 0x0 0x1d 0x0 0x1 0x0 0x0 0x0 0x1e 0x0 0x1e 0x0 0x17 0x0 0x1e 
200.0x0 0x1 0x0 0x0 0x0 0x1f 0x0 0x1f 0x0 0x19 0x0 0x1f 0x0 0x1 0x0 0x0 0x0 0x20 0x0 0x20 
220.0x0 0xc 0x0 0x20 0x0 0x1 0x0 0x0 0x0 0x21 0x0 0x21 0x0 0xc 0x0 0x21 0x0 0x1 0x0 0x0 
240.0x0 0xa 0x0 0xa 0x0 0x1 0x0 0x0 0x0 0xb 0x0 0xb 0x0 0x1 0x0 0x0 0x0 0x28 0x0 0x28 
260.0x0 0x1 0x0 0x0 0x0 0x29 0x0 0x29 0x0 0x1 0x0 0x0 0x0 0x75 0x0 0x75 0x0 0x1 0x0 0x0 
280.0x0 0x78 0x0 0x78 0x0 0x1 0x0 0x0 0x1 0x22 0x1 0x22 0x0 0x1 0x0 0x0 0x1 0x23 0x1 0x23 
300.0x0 0x1 0x1 0x23 0x0 0x1 0x0 0x0 0x1 0x24 0x1 0x24 0x0 0x1 0x0 0x0 0x1 0x25 0x1 0x25 
320.0x0 0x1 0x0 0x0 0x1 0x26 0x1 0x26 0x0 0x1 0x0 0x0 0x1 0x2a 0x1 0x2a 0x0 0x1 0x0 0x0 
340.0x1 0x2b 0x1 0x2b 0x0 0x1 0x0 0x0 0x1 0x2c 0x1 0x2c 0x0 0x1 0x0 0x0 0x1 0x2d 0x1 0x2d 
360.0x0 0x1 0x0 0x0 0x1 0x2e 0x1 0x2e 0x0 0x1 0x0 0x0 0x1 0x2f 0x1 0x2f 0x0 0x1 0x0 0x0 
380.0x1 0x30 0x1 0x30 0x0 0x1 0x0 0x0 0x1 0x31 0x1 0x31 0x0 0x1 0x0 0x0 0x1 0x32 0x1 0x32 
400.0x0 0x1 0x0 0x0 0x1 0x33 0x1 0x33 0x0 0x1 0x0 0x0 0x1 0x34 0x1 0x34 0x0 0x1 0x0 0x0 
420.0x1 0x35 0x1 0x35 0x0 0x1 0x0 0x0 0x1 0x36 0x1 0x36 0x0 0x1 0x0 0x0 0x1 0x37 0x1 0x37 
440.0x0 0x1 0x0 0x0 0x1 0x38 0x1 0x38 0x0 0x1 0x0 0x0 0x1 0x39 0x1 0x39 0x0 0x1 0x0 0x0 
460.0x1 0x3b 0x1 0x3b 0x0 0x1 0x0 0x0 0x1 0x3c 0x1 0x3c 0x0 0x1 0x0 0x0 0x1 0x3d 0x1 0x3d 
480.0x0 0x1 0x0 0x0 0x1 0x3e 0x1 0x3e 0x0 0x1 0x0 0x0 0x1 0x3f 0x1 0x3f 0x0 0x1 0x0 0x0 
500.0x1 0x40 0x1 0x40 0x0 0x1 0x0 0x0 0x1 0x41 0x1 0x41 0x0 0x1 0x0 0x0 0x1 0x42 0x1 0x42 
520.0x0 0x1 0x0 0x0 0x1 0x43 0x1 0x43 0x0 0x1 0x0 0x0 0x1 0x47 0x1 0x47 0x0 0x1 0x0 0x0 
540.0x1 0x48 0x1 0x48 0x0 0x1 0x0 0x0 0x1 0x49 0x1 0x49 0x0 0x1 0x0 0x0 0x1 0x4b 0x1 0x4b 
560.0x0 0x1 0x0 0x0 0x1 0x4d 0x1 0x4d 0x0 0x1 0x0 0x0 0x1 0x4e 0x1 0x4e 0x0 0x1 0x0 0x0 
580.0x1 0x4f 0x1 0x4f 0x0 0x1 0x0 0x0 0x1 0x50 0x1 0x50 0x0 0x1 0x0 0x0 0x1 0x51 0x1 0x51 
600.0x0 0x1 0x0 0x0 0x1 0x52 0x1 0x52 0x0 0x1 0x0 0x0 0x1 0x53 0x1 0x53 0x0 0x1 0x0 0x0 
620.0x1 0x54 0x1 0x54 0x0 0x1 0x0 0x0 0x1 0x55 0x1 0x55 0x0 0x1 0x0 0x0 0x1 0x56 0x1 0x56 
640.0x0 0x1 0x0 0x0 0x1 0x57 0x1 0x57 0x0 0x1 0x1 0x57 0x0 0x1 0x0 0x0 0x1 0x58 0x1 0x58 
660.0x0 0x1 0x0 0x0 0x1 0x59 0x1 0x59 0x0 0x1 0x0 0x0 0x1 0x5a 0x1 0x5a 0x0 0x1 0x0 0x0 
680.0x1 0x5c 0x1 0x5c 0x0 0x1 0x0 0x0 0x1 0x5d 0x1 0x5d 0x0 0x1 0x0 0x0 0x1 0x62 0x1 0x62 
700.0x0 0x1 0x0 0x0 0x1 0x63 0x1 0x63 0x0 0x1 0x0 0x0 0x1 0x67 0x1 0x67 0x0 0x1 0x0 0x0 
720.0x1 0x6b 0x1 0x6b 0x0 0x1 0x0 0x0 0x1 0x7c 0x1 0x7c 0x0 0x1 0x0 0x0 0x1 0x7d 0x1 0x7d 
740.0x0 0x1 0x0 0x0 0x1 0x7e 0x1 0x7e 0x0 0x1 0x0 0x0 0x1 0x7f 0x1 0x7f 0x0 0x1 0x0 0x0 
760.0x1 0x80 0x1 0x80 0x0 0x1 0x0 0x0 0x1 0x81 0x1 0x81 0x0 0x1 0x0 0x0 0x1 0x82 0x1 0x82 
780.0x0 0x1 0x0 0x0 0x1 0x83 0x1 0x83 0x0 0x1 0x0 0x0 0x1 0x84 0x1 0x84 0x0 0x1 0x0 0x0 
800.0x1 0x85 0x1 0x85 0x0 0x1 0x0 0x0 0x1 0x86 0x1 0x86 0x0 0x1 0x0 0x0 0x1 0x87 0x1 0x87 
820.0x0 0x1 0x0 0x0 0x1 0x89 0x1 0x89 0x0 0x1 0x0 0x0 0x1 0x8a 0x1 0x8a 0x0 0x1 0x0 0x0 
840.0x1 0x8b 0x1 0x8b 0x0 0x1 0x0 0x0 0x1 0x8c 0x1 0x8c 0x0 0x1 0x0 0x0 0x1 0x8d 0x1 0x8d 
860.0x0 0x1 0x0 0x0 0x1 0x8e 0x1 0x8e 0x0 0x1 0x0 0x0 0x1 0x8f 0x1 0x8f 0x0 0x1 0x0 0x0 
880.0x1 0x90 0x1 0x90 0x0 0x1 0x0 0x0 0x1 0x91 0x1 0x91 0x0 0x1 0x0 0x0 0x1 0x94 0x1 0x94 
900.0x0 0x1 0x1 0x25 0x0 0x1 0x0 0x0 0x1 0x95 0x1 0x95 0x0 0x1 0x0 0x0 0x1 0x96 0x1 0x96 
920.0x0 0x1 0x0 0x0 0x1 0x97 0x1 0x97 0x0 0x1 0x0 0x0 0x1 0x9d 0x1 0x9d 0x0 0x1 0x0 0x0 
940.0x1 0x9e 0x1 0x9e 0x0 0x1 0x0 0x0 0x1 0x9f 0x1 0x9f 0x0 0x1 0x0 0x0 0x1 0xa0 0x1 0xa0 
960.0x0 0x1 0x0 0x0 0x1 0xa1 0x1 0xa1 0x0 0x1 0x0 0x0 0x1 0xa2 0x1 0xa2 0x0 0x1 0x0 0x0 
980.0x1 0xa3 0x1 0xa3 0x0 0x1 0x0 0x0 0x1 0xa4 0x1 0xa4 0x0 0x1 0x0 0x0 0x1 0xa5 0x1 0xa5 
1000.0x0 0x1 0x0 0x0 0x1 0xa6 0x1 0xa6 0x0 0x1 0x0 0x0 0x1 0xa7 0x1 0xa7 0x0 0x1 0x0 0x0 
1020.0x1 0xa8 0x1 0xa8 0x0 0x1 0x0 0x0 0x1 0xa9 0x1 0xa9 0x0 0x1 0x0 0x0 0x1 0xaa 0x1 0xaa 
1040.0x0 0x1 0x0 0x0 0x1 0xab 0x1 0xab 0x0 0x1 0x0 0x0 0x1 0xad 0x1 0xad 0x0 0x1 0x0 0x0 
1060.0x1 0xae 0x1 0xae 0x0 0x1 0x0 0x0 0x1 0xaf 0x1 0xaf 0x0 0x1 0x0 0x0 0x1 0xb0 0x1 0xb0 
1080.0x0 0x1 0x0 0x0 0x1 0xb1 0x1 0xb1 0x0 0x1 0x0 0x0 0x1 0xc1 0x1 0xc1 0x0 0x1 0x0 0x0 
1100.0x1 0xc2 0x1 0xc2 0x0 0x1 0x1 0x25 0x0 0x1 0x0 0x0 0x1 0xc6 0x1 0xc6 0x0 0x1 0x0 0x0 
1120.0x1 0xc7 0x1 0xc7 0x0 0x1 0x0 0x0 0x1 0xc8 0x1 0xc8 0x0 0x1 0x0 0x0 0x1 0xc9 0x1 0xc9 
1140.0x0 0x1 0x0 0x0 0x1 0xca 0x1 0xca 0x0 0x1 0x1 0x9f 0x0 0x1 0x0 0x0 0x1 0xcb 0x1 0xcb 
1160.0x0 0x1 0x1 0xa0 0x0 0x1 0x0 0x0 0x1 0xcc 0x1 0xcc 0x0 0x1 0x1 0xa2 0x0 0x1 0x0 0x0 
1180.0x1 0xcd 0x1 0xcd 0x0 0x1 0x1 0xa3 0x0 0x1 0x0 0x0 0x1 0xce 0x1 0xce 0x0 0x1 0x1 0xb1 
1200.0x0 0x1 0x0 0x0 0x1 0xcf 0x1 0xcf 0x0 0x1 0x1 0x22 0x0 0x1 0x0 0x0 0x1 0xd2 0x1 0xd2 
1220.0x0 0x1 0x0 0x0 0x1 0xd3 0x1 0xd3 0x0 0x1 0x1 0xab 0x0 0x1 0x0 0x0 0x1 0xd4 0x1 0xd4 
1240.0x0 0x1 0x0 0x0 0x1 0xd5 0x1 0xd5 0x0 0x1 0x0 0x0 0x1 0xd6 0x1 0xd6 0x0 0x1 0x0 0x0 
1260.0x1 0xd7 0x1 0xd7 0x0 0x1 0x0 0x0 0x1 0xd8 0x1 0xd8 0x0 0x1 0x0 0x0 0x1 0xd9 0x1 0xd9 
1280.0x0 0x1 0x0 0x0 0x1 0xda 0x1 0xda 0x0 0x1 0x0 0x0 0x1 0xdb 0x1 0xdb 0x0 0x1 0x0 0x0 
1300.0x1 0xdc 0x1 0xdc 0x0 0x1 0x0 0x0 0x1 0xdd 0x1 0xdd 0x0 0x1 0x0 0x0 0x1 0xde 0x1 0xde 
1320.0x0 0x1 0x0 0x0 0x1 0xdf 0x1 0xdf 0x0 0x1 0x0 0x0 0x1 0xe0 0x1 0xe0 0x0 0x1 0x0 0x0 
1340.0x1 0xe1 0x1 0xe1 0x0 0x1 0x0 0x0 0x1 0xe2 0x1 0xe2 0x0 0x1 0x0 0x0 0x1 0xe3 0x1 0xe3 
1360.0x0 0x1 0x1 0x6b 0x0 0x1 0x0 0x0 0x1 0xe4 0x1 0xe4 0x0 0x1 0x0 0x0 0x1 0xe5 0x1 0xe5 
1380.0x0 0x1 0x0 0x0 0x1 0xe6 0x1 0xe6 0x0 0x1 0x0 0x0 0x1 0xea 0x1 0xea 0x0 0x1 0x0 0x0 
1400.0x1 0xeb 0x1 0xeb 0x0 0x1 0x0 0x0 0x1 0xec 0x1 0xec 0x0 0x1 0x0 0x0 0x1 0xed 0x1 0xed 
1420.0x0 0x1 0x0 0x0 0x1 0xee 0x1 0xee 0x0 0x1 0x0 0x0 0x1 0xef 0x1 0xef 0x0 0x1 0x0 0x0 
1440.0x1 0xf0 0x1 0xf0 0x0 0x1 0x0 0x0 0x1 0xf2 0x1 0xf2 0x0 0x1 0x0 0x0 0x1 0xf3 0x1 0xf3 
1460.0x0 0x1 0x0 0x0 0x1 0xf4 0x1 0xf4 0x0 0x1 0x0 0x0 0x1 0xf5 0x1 0xf5 0x0 0x1 0x0 0x0 
1480.0x1 0xf6 0x1 0xf6 0x0 0x1 0x0 0x0 0x1 0xfd 0x1 0xfd 0x0 0x1 0x0 0x0 0x1 0xfe 0x1 0xfe 
1500.0x0 0x1 0x0 0x0 0x2 0x1 0x2 0x1 0x0 0x1 0x0 0x0 0x2 0x2 0x2 0x2 0x0 0x1 0x0 0x0 
1520.0x2 0x4 0x2 0x4 0x0 0x1 0x0 0x0 0x2 0x5 0x2 0x5 0x0 0x1 0x0 0x0 0x2 0x6 0x2 0x6 
1540.0x0 0x1 0x0 0x0 0x2 0x7 0x2 0x7 0x0 0x1 0x0 0x0 0x2 0x8 0x2 0x8 0x0 0x1 0x0 0x0 
1560.0x2 0x9 0x2 0x9 0x0 0x1 0x0 0x0 0x2 0xa 0x2 0xa 0x0 0x1 0x0 0x0 0x2 0xb 0x2 0xb 
1580.0x0 0x1 0x0 0x0 0x2 0xc 0x2 0xc 0x0 0x1 0x0 0x0 0x2 0xd 0x2 0xd 0x0 0x1 0x0 0x0 
1600.0x2 0xe 0x2 0xe 0x0 0x1 0x0 0x0 0x2 0xf 0x2 0xf 0x0 0x1 0x0 0x0 0x2 0x10 0x2 0x10 
1620.0x0 0x1 0x0 0x0 0x2 0x11 0x2 0x11 0x0 0x1 0x0 0x0 0x2 0x12 0x2 0x12 0x0 0x1 0x0 0x0 
1640.0x2 0x13 0x2 0x13 0x0 0x1 0x0 0x0 0x2 0x14 0x2 0x14 0x0 0x1 0x0 0x0 0x2 0x15 0x2 0x15 
1660.0x0 0x1 0x0 0x0 0x2 0x16 0x2 0x16 0x0 0x1 0x0 0x0 0x2 0x17 0x2 0x17 0x0 0x1 0x0 0x0 
1680.0x2 0x18 0x2 0x18 0x0 0x1 0x0 0x0 0x2 0x19 0x2 0x19 0x0 0x1 0x0 0x0 0x2 0x1a 0x2 0x1a 
1700.0x0 0x1 0x0 0x0 0x2 0x1b 0x2 0x1b 0x0 0x1 0x0 0x0 0x2 0x1f 0x2 0x1f 0x0 0x1 0x0 0x0 
1720.0x2 0x20 0x2 0x20 0x0 0x1 0x0 0x0 0x2 0x21 0x2 0x21 0x0 0x1 0x0 0x0 0x2 0x22 0x2 0x22 
1740.0x0 0x1 0x0 0x0 0x2 0x23 0x2 0x23 0x0 0x1 0x0 0x0 0x2 0x24 0x2 0x24 0x0 0x1 0x0 0x0 
1760.0x2 0x25 0x2 0x25 0x0 0x1 0x0 0x0 0x2 0x26 0x2 0x26 0x0 0x1 0x0 0x0 0x2 0x27 0x2 0x27 
1780.0x0 0x1 0x0 0x0 0x2 0x28 0x2 0x28 0x0 0x1 0x0 0x0 0x2 0x29 0x2 0x29 0x0 0x1 0x0 0x0 
1800.0x2 0x2a 0x2 0x2a 0x0 0x1 0x0 0x0 0x2 0x2b 0x2 0x2b 0x0 0x1 0x0 0x0 0x2 0x2c 0x2 0x2c 
1820.0x0 0x1 0x0 0x0 0x2 0x2d 0x2 0x2d 0x0 0x1 0x0 0x0 0x2 0x2e 0x2 0x2e 0x0 0x1 0x0 0x0 
1840.0x2 0x2f 0x2 0x2f 0x0 0x1 0x0 0x0 0x2 0x30 0x2 0x30 0x0 0x1 0x0 0x0 0x2 0x31 0x2 0x31 
1860.0x0 0x1 0x0 0x0 0x2 0x32 0x2 0x32 0x0 0x1 0x0 0x0 0x2 0x33 0x2 0x33 0x0 0x1 0x0 0x0 
1880.0x2 0x34 0x2 0x34 0x0 0x1 0x0 0x0 0x2 0x36 0x2 0x36 0x0 0x1 0x0 0x0 0x2 0x37 0x2 0x37 
1900.0x0 0x1 0x0 0x0 0x2 0x38 0x2 0x38 0x0 0x1 0x0 0x0 0x2 0x39 0x2 0x39 0x0 0x1 0x0 0x0 
1920.0x2 0x3a 0x2 0x3a 0x0 0x1 0x0 0x0 0x2 0x3b 0x2 0x3b 0x0 0x1 0x0 0x0 0x2 0x3c 0x2 0x3c 
1940.0x0 0x1 0x0 0x0 0x2 0x3d 0x2 0x3d 0x0 0x1 0x0 0x0 0x2 0x3e 0x2 0x3e 0x0 0x1 0x0 0x0 
1960.0x2 0x3f 0x2 0x3f 0x0 0x1 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 
转换成字符如下:
0.¯TT*
20.oÿ
40.ÿÿÿÿâ
60.€<<<€
80. Ð
100.
120.
140.
160.
180.
200.  
220. !!!
240.((
260.))uu
280.xx""##
300.#$$%%
320.&&**
340.++,,--
360...//
380.001122
400.3344
420.556677
440.8899
460.;;<<==
480.>>??
500.@@AABB
520.CCGG
540.HHIIKK
560.MMNN
580.OOPPQQ
600.RRSS
620.TTUUVV
640.WWWXX
660.YYZZ
680.\]]bb
700.ccgg
720.kk||}}

是不是看起来很乱,一点一点的对比。还是从这些包里找到了一些规律

用户连接通讯协议

byte{0x4, 0x8e, 0x0, 0x0, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x73, 0x3, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}开头的包是用户登录验证包,写了一段代码来捕获这种包,我们就可以拦截用户的登录请求

写一段代码:

//临时放在这里定义,正式用的时候,需要拉出来const
  bLogininfo := [...]byte{0x4, 0x8e, 0x0, 0x0, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x73, 0x3, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
  //print(bLogininfo)
  for {
    n, err := src.Read(buffer)
    if err != nil {
      return
    }
    if n >= 80 {
      //不处理size小的包    
      if eqByte(bLogininfo[0:], buffer[0:20]) {
        fmt.Printf("抓到:%s到%s的用户登录包n", sqlInfo.client, sqlInfo.server)
        fmt.Printf("%sn", getLogininfo(buffer[58:260]))
      } else {
        fmt.Printf("抓到:%s到%s的包n", sqlInfo.client, sqlInfo.server)          
        printBufferHead(buffer, 40)
      }
    }
 }

运行这段代码,劫持请求,得到结果:

抓到:127.0.0.1到192.168.1.1的用户登录包
user:dboopreader,
信息:AUTH_SESSKEY,163E93DAE74B0DE9064655D10B5EE4A99B74EAD98C9F7435E216815ADB016F42758C860CF8A951D57F760FC783D0646A,
密文:AUTH_PASSWORD,@C1BCC4B909251E032F2635AD1E592D7A684DAC2F58169E

这里我们看到了Oracle的认证协议,理论上这里我们就可以在Proxy这层改动这个包,修改传过去的用户名和密码。

SQL请求协议

实现一个Oracle代理最重要的一步是要抓到访问的SQL,这里是实现sql日志/sql黑名单/读写分离的关键。经过耐心对比,确定这两种包头的通讯包里包含了SQL信息

OracleSQL请求协议头

其中

  • 红圈的包是首次执行SQL时发起的包。

  • 绿色的是同一个连接(conn没有close) 后续发起的SQL.

拦截这两种头的通讯包,就可以拿到真正的SQL语句。

Oralce通讯信息的分析,SQL部分,明天再续....

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/wokofo/p/17081670.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!