从零写一个兼容MySQL/Oracle的Proxy中件间(一)《初识Oracle的通信协议》

   2023-02-10 学习力0
核心提示:从零写一个兼容MySQL/Oracle的Proxy中件间(一)《初识Oracle的通信协议》0.前言MySQL由于开源的原因,有各式各样的中件间Proxy ,极大的丰富了做高可用或迁移的方案,习惯了MySQL生态圈的灵活和便利,Oracle官方不开源代码和协议,没有中间件proxy,显得很笨

从零写一个兼容MySQL/Oracle的Proxy中件间(一)《初识Oracle的通信协议》

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("%s\n", 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部分,明天再续....

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • sql:mysql:函数:TIMESTAMPDIFF函数实现TimeStamp字段相减,求得时间差
    sql:mysql:函数:TIMESTAMPDIFF函数实现TimeS
     函数内指定是minute,则最终结果value值的单位是分钟,如果函数内指定为hours,则最终结果value值单位为小时。//UPLOAD_TIME 减去 CREATE_DTTM 求得时间差,以分钟数计时select avg(TIMESTAMPDIFF(MINUTE,CREATE_DTTM,UPLOAD_TIME)) value,LEFT(CREATE_DTTM
    03-08
  • 去重复的sql(Oracle) 去重复的英文
    1.利用group by 去重复2.可以利用下面的sql去重复,如下  1) select id,name,sex from (select a.*,row_number() over(partition by a.id,a.set order by name) su from test a ) where su=1  2)select id,name,sex from (select a.*,row_number() over(p
    02-10
  • Oracle SQL七次提速技巧
    以下SQL执行时间按序号递减。1,动态SQL,没有绑定变量,每次执行都做硬解析操作,占用较大的共享池空间,若共享池空间不足,会导致其他SQL语句的解析信息被挤出共享池。create or replace procedure proc1as beginfor i in 1..100000 loop    execute imme
    02-10
  • Oracle\SQL  Server等及其他基本语句写法
    Oracle\SQL Server等及其他基本语句写法
    Oracle\SQL  Server等及其他基本语句写法目录一.Excel相关 11.Excel中写脚本范例: 12.提取字节 23. 提取单元格内字符 24.VLOOKUP函数: 2二.SQL语句汇总 21.建表: 22.增 33.删 44.查 65.改 236.Alter的应用 24三.数据库备份与恢复脚本 261. Oracle: 2
    02-10
  • SQL ORACLE case when函数用法
    case when 用法(1)简单case函数:格式:  case 列名   when 条件值1 then 选项1  when 条件值1 then 选项2......  else 默认值 end例如:  select   case job_level  when '1' then '1111'  when '2' then '2222'   when '3' then '3333
    02-10
  • mysql下如何执行sql脚本 执行SQL脚本
    1.编写sql脚本,假设内容如下:  create database dearabao;  use dearabao;  create table niuzi (name varchar(20));  保存脚本文件,假设我把它保存在F盘的hello world目录下,于是该文件的路径为:F:\hello world\niuzi.sql2.执行sql脚本,可以有2种方法: 
    02-10
  • MySQL 5.7版本sql_mode=only_full_group_by问题
    用到GROUP BY 语句查询时com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'col_user_6.a.START_TIME' which is not functionally dependent on colu
    02-10
  • Oracle迁移到MySQL性能下降的注意点 oracle数据
    背景:最近有较多的客户系统由原来由Oracle改造到MySQL后出现了性能问题CPU 100%,或是后台的CRM系统复杂SQL在业务高峰的时候出现堆积导致业务故障。在我的记忆里面淘宝最初从Oracle迁移到MySQL期间也遇到了很多SQL的性能问题,记忆最为深刻的子查询,当初的
    02-10
  • ORACLE中通过SQL语句(alter table)来增加、删除
    1.添加字段:alter table  表名  add (字段  字段类型)  [ default  '输入默认值']  [null/not null]  ;2.添加备注:comment on column  库名.表名.字段名 is  '输入的备注';  如: 我要在ers_data库中  test表 document_type字段添加备注  comm
    02-10
  • MySQL与Oracle 差异比较之六触发器
    触发器编号类别ORACLEMYSQL注释1创建触发器语句不同create or replace trigger TG_ES_FAC_UNIT  before insert or update or delete on ES_FAC_UNIT  for each rowcreate trigger `hs_esbs`.`TG_INSERT_ES_FAC_UNIT` BEFORE INSERT on `hs_esbs`.`es_fac_u
    02-10
点击排行