0.前言 MySQL由於開源的原因,有各式各樣的中件間Proxy ,極大的豐富了做高可用或遷移的方案,習慣了MySQL生態圈的靈活和便利,Oracle官方不開源代碼和協議,沒有中間件proxy,顯得很笨重。 比如以下的方案就會很不好辦: 實時抓取Oralce的訪問SQL日誌 慢日誌捕獲和收集 高可用 ...
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/[email protected]:1521/testdb')
print("連接成功")
conn.close()
print("連接關閉")
通過wireshark抓包,發現一次簡單的連接,有38個通信包。
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信息
其中
-
紅圈的包是首次執行SQL時發起的包。
-
綠色的是同一個連接(conn沒有close) 後續發起的SQL.
攔截這兩種頭的通訊包,就可以拿到真正的SQL語句。
Oralce通訊信息的分析,SQL部分,明天再續....