Mysql

字元串命令列印一些額外的字元

  • July 29, 2013

我正在嘗試使用 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(ASCII q),這可能是您在 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僅輸出。

引用自:https://unix.stackexchange.com/questions/84795