zhu*_*wei 9 mysql wireshark tshark
因为我们使用远程Mysql服务器开发,所以不能轻易检查查询sql,如果使用本地服务器你可以tail - f general_log_file在调用一些http接口时查看执行哪些sql.所以我安装了一个wireshark来捕获这些查询从本地发送的sql.起初我使用本地mysql来验证它.
然后我在mysql终端中执行了两个查询sql
select version();
select now();
Run Code Online (Sandbox Code Playgroud)
但非常令人失望我在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
Run Code Online (Sandbox Code Playgroud)
和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
...
Run Code Online (Sandbox Code Playgroud)
您可以使用tshark并保存到pcap或只导出您感兴趣的字段.
要保存到pcap(如果您想使用wireshark稍后查看):
tshark -i lo -Y "mysql.command==3" -w outputfile.pcap
tshark -i lo -R "mysql.command==3" -w outputfile.pcap
-R is deprecated for single pass filters, but it will depend on your version
-i is interface so replace that with whatever interface you are using (e.g -i eth0)
Run Code Online (Sandbox Code Playgroud)
要保存到文本文件:
tshark -i lo -Y "mysql.command==3" -T fields -e mysql.query > output.txt
Run Code Online (Sandbox Code Playgroud)
您还可以将BPF过滤器与tcpdump(以及wireshark前置过滤器)一起使用.它们更复杂,但如果您捕获大量流量,则会减少对系统的负担.
sudo tcpdump -i lo "dst port 3306 and tcp[(((tcp[12:1]&0xf0)>>2)+4):1]=0x03" -w outputfile.pcap
Run Code Online (Sandbox Code Playgroud)
注意:
*这将在TCP有效负载中查找03(类似mysql.command == 3).
**由于这是一个相当宽松的过滤器,我还添加了3306以限制只发往该端口的流量.***过滤器基于您的屏幕截图.我现在无法验证它,所以让我知道它是否不起作用.
| 归档时间: |
|
| 查看次数: |
17151 次 |
| 最近记录: |