【发布时间】:2016-07-03 07:13:29
【问题描述】:
由于我们使用远程Mysql服务器进行开发,所以无法轻松查看查询sql,如果使用本地服务器可以tail - f general_log_file查看调用某个http接口时执行了哪些sql。所以我安装了一个wireshark 来捕获这些从本地发送的查询sql。一开始我使用本地mysql来验证它。
然后我在mysql终端执行了两个查询sql
select version();
select now();
但是很失望我在wireshark中找不到这两个sql包 我只找到了这四个包。
但是从我知道的帖子中
要过滤掉 mysql 数据包,您只需使用过滤器 ‘mysql’ 或 ‘mysql.query != “”‘ 当您只想要请求查询的数据包时。之后,您可以添加一个字段名称为“mysql.query”的自定义列,以获得执行的查询列表。
效果是这样的
只捕获查询sql很方便,并且非常清楚的显示这些查询sql。那么我该如何使用wireshark 来实现呢?
嗨@Jeff S.
我试过你的命令,请看下面
#terminal 1
tshark -i lo0 -Y "mysql.command==3"
Capturing on 'Loopback'
# terminal 2
mysql -h127.0.0.1 -u root -p
select version();
#result: nothing output in terminal 1
并且tshark -i lo0 -Y "mysql.command==3" -T fields -e mysql.query 与tshark -i lo -Y "mysql.command==3" 相同,也没有任何输出。但是如果我只使用tshark -i lo0,它就有输出
Capturing on 'Loopback'
1 0.000000 127.0.0.1 -> 127.0.0.1 TCP 68 57881 → 3306 [SYN] Seq=0 Win=65535 Len=0 MSS=16344 WS=32 TSval=1064967501 TSecr=0 SACK_PERM=1
2 0.000062 127.0.0.1 -> 127.0.0.1 TCP 68 3306 → 57881 [SYN, ACK] Seq=0 Ack=1 Win=65535 Len=0 MSS=16344 WS=32 TSval=1064967501 TSecr=1064967501 SACK_PERM=1
3 0.000072 127.0.0.1 -> 127.0.0.1 TCP 56 57881 → 3306 [ACK] Seq=1 Ack=1 Win=408288 Len=0 TSval=1064967501 TSecr=1064967501
4 0.000080 127.0.0.1 -> 127.0.0.1 TCP 56 [TCP Window Update] 3306 → 57881 [ACK] Seq=1 Ack=1 Win=408288 Len=0 TSval=1064967501 TSecr=1064967501
...
【问题讨论】:
-
这正是你必须要做的。如果你在过滤器中输入这个会发生什么?显示列将随您的过滤器而变化。