Mysql
字元串命令列印一些額外的字元
我正在嘗試使用 tcpdump 擷取 mysql 流量並使用
strings
命令將其轉換為文本,但是在擷取 mysql 流量時,我在每個字元的末尾都得到了一些額外的字元。我無法弄清楚原因。例如
CREATE TABLE foo1.foo (id INTEGER, name VARCHAR(20))H>
如您所見,
H>
查詢結束時有。有人可以幫我解決這個問題。**編輯:**我正在執行以下命令來擷取流量。
$ sudo tcpdump -i any -s 0 -l -w - dst port 3306 | stdbuf -i0 -o0 -e0 strings -12
該
mysql
協議不是文本協議,因此將交換以二進製表示的字元串和數字。如果組成數字的字節看起來與您的語言環境中的可列印字元匹配,它們將顯示為strings
.即使它是一個文本協議,查詢之後也將是下一個擷取的乙太網幀的開始,其 pcap 標頭很可能包含與您的語言環境中的可列印字元匹配的字節值。通常,pcap 標頭的前 4 個字節是擷取時間,以本地字節序表示為 32 位數字。例如,目前的 Unix 時間是 0x51f65c79,在 x86 PC 上將儲存為以下字節:0x79(ASCII
y
)、0x5c(ASCII 反斜杠)、0xfc、0x51(ASCIIq
),這可能是您在 MySQL 中看到的query
數據包,查詢文本本身是最後的。還要記住,長查詢可能會被分割成幾個 TCP 數據包,並且可能包含在您的語言環境中不可列印的字元。
您應該使用能夠剖析 mysql 協議的東西,例如
tshark
:tshark -T fields -e 'mysql.query' -i any -R 'mysql.command == 3' tcp port mysql
這告訴
tshark
擷取any
介面上埠 3306 (mysql) 上的 TCP 流量,僅過濾 mysql 查詢流量 (mysql.command == 3
),並query
僅輸出。