0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

DBA抓包神器tshark测评

OSC开源社区 来源:OSC开源社区 2023-06-16 15:54 次阅读

作者:赵黎明

爱可生 MySQL DBA 团队成员,熟悉 Oracle、MySQL 等数据库,擅长数据库性能问题诊断、事务与锁问题的分析等,负责处理客户 MySQL 及我司自研 DMP 平台日常运维中的问题,对开源数据库相关技术非常感兴趣。

1常用抓包工具

tshark、tcpdump 和 Wireshark 都是网络抓包工具,它们可以在网络上捕获和分析数据包。

tcpdump

一个开源的,基于命令行的网络抓包工具。它可以捕获和分析网络数据包,运行在几乎所有的 Unix 和 Linux 系统上;可以抓取实时网络通信中的数据包,然后通过过滤器及其他参数,对数据包进行解析和处理。

tshark

Wireshark 的命令行版本,也是一个开源的网络分析工具。它可以在命令行下捕获和分析网络流量数据,并使用 Wireshark 的过滤器来提取所需的数据,还支持与各种脚本语言(如 Python 和 Perl)结合使用,以自动化分析过程。

Wireshark

是一个流行的网络协议分析器,支持从在线网络或本地文件中捕获数据包,并提供了图形化用户界面来展示数据包内容;可以解析并显示各种网络协议,并提供了强大的分析工具以及过滤器;与 tshark 和 tcpdump 相比,Wireshark 的优势在于它提供了友好的 GUI 界面,使用户更轻松地进行网络协议的分析和调试。

小结

以上这些工具都可以直接捕获和分析网络数据包,但它们在使用方式和功能上略有不同;通常,我们会先用 tcpdump 或 tshark 在目标服务器上抓包生成 pcap 文件,再将其拿到装有 Wireshark 的主机上进行分析,本文将会分享 tshark 和 Wireshark 的一些使用技巧。

2三次握手和四次挥手

TCP 协议中的三次握手和四次挥手是 TCP 连接建立和关闭的过程。

三次握手

客户端向服务器发送 SYN 报文(请求建立连接)

服务器收到 SYN 报文后,回复 SYN+ACK 报文(同意建立连接)

客户端收到 SYN+ACK 报文后,再回复 ACK 报文(确认连接建立)

77fe5900-0c16-11ee-962d-dac502259ad0.png

四次挥手

客户端向服务器发送 FIN 报文(请求断开连接)

服务器收到 FIN 报文后,回复 ACK 报文(确认收到请求)

当服务器确认数据已经全部发送完毕后,它会向客户端发送 FIN 报文(关闭连接)

客户端收到 FIN 报文后,回复 ACK 报文(表示确认收到关闭请求),至此,整个 TCP 连接就被彻底关闭了

781f498a-0c16-11ee-962d-dac502259ad0.png

三次握手用于建立连接,是双方协商建立 TCP 连接的过程;四次挥手用于断开连接,是双方结束 TCP 连接的过程;不过,有时候四次挥手也会变成三次(如果没有数据发送,2 个包会合并传输)。

784ff54e-0c16-11ee-962d-dac502259ad0.png

3三次握手和四次挥手的过程

我们可以通过 tshark 抓包来观察 TCP 连接、断开的具体过程。

--在服务端执行tshark命令进行抓包
dmp2(master)~#tshark-f'tcpport3332andhost10.186.61.83'
Runningasuser"root"andgroup"root".Thiscouldbedangerous.
Capturingon'eth0'
==>等待捕获TCP包直到有内容输出

#此处省略了-i,默认会选择第一个非loopback的网络接口(可简写为lo),效果与指定-ieth0相同
#-f,指定捕获过滤器的表达式,可指定需要捕获的内容,如:协议、端口、主机IP等

--通过MySQL客户端远程连接到MySQL实例,等待片刻后再退出
{master}~#m3332-s(此处配置了alias,可省略具体的连接串)
mysql:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.
mysql>exit

--观察屏幕输出

1、三次握手
从左到右的字段依次代表序号、时间戳(纳秒)、源端IP、目标端IP、协议、包的长度(字节)、具体信息(包括源/目标端口号或设备名、标志位等内容)
10.00000000010.186.61.83->10.186.60.68TCP7438858>mcs-mailsvr[SYN]Seq=0Win=29200Len=0MSS=1460SACK_PERM=1TSval=2369606050TSecr=0WS=128
20.00001836810.186.60.68->10.186.61.83TCP74mcs-mailsvr>38858[SYN,ACK]Seq=0Ack=1Win=28960Len=0MSS=1460SACK_PERM=1TSval=2369617045TSecr=2369606050WS=128
30.00023316110.186.61.83->10.186.60.68TCP6638858>mcs-mailsvr[ACK]Seq=1Ack=1Win=29312Len=0TSval=2369606050TSecr=2369617045
40.00059242010.186.60.68->10.186.61.83TCP148mcs-mailsvr>38858[PSH,ACK]Seq=1Ack=1Win=29056Len=82TSval=2369617045TSecr=2369606050
50.00082792010.186.61.83->10.186.60.68TCP6638858>mcs-mailsvr[ACK]Seq=1Ack=83Win=29312Len=0TSval=2369606051TSecr=2369617045
60.00083351210.186.61.83->10.186.60.68TCP10238858>mcs-mailsvr[PSH,ACK]Seq=1Ack=83Win=29312Len=36TSval=2369606051TSecr=2369617045
70.00083726310.186.60.68->10.186.61.83TCP66mcs-mailsvr>38858[ACK]Seq=83Ack=37Win=29056Len=0TSval=2369617045TSecr=2369606051
80.00199799810.186.61.83->10.186.60.68TCP26438858>mcs-mailsvr[PSH,ACK]Seq=37Ack=83Win=29312Len=198TSval=2369606052TSecr=2369617045
90.00202191610.186.60.68->10.186.61.83TCP66mcs-mailsvr>38858[ACK]Seq=83Ack=235Win=30080Len=0TSval=2369617047TSecr=2369606052
100.00697722310.186.60.68->10.186.61.83TCP2088mcs-mailsvr>38858[PSH,ACK]Seq=83Ack=235Win=30080Len=2022TSval=2369617052TSecr=2369606052
110.00722734010.186.61.83->10.186.60.68TCP6638858>mcs-mailsvr[ACK]Seq=235Ack=2105Win=33280Len=0TSval=2369606057TSecr=2369617052
120.00842644710.186.61.83->10.186.60.68TCP17138858>mcs-mailsvr[PSH,ACK]Seq=235Ack=2105Win=33280Len=105TSval=2369606058TSecr=2369617052
130.00881232410.186.60.68->10.186.61.83TCP308mcs-mailsvr>38858[PSH,ACK]Seq=2105Ack=340Win=30080Len=242TSval=2369617053TSecr=2369606058
140.00909971210.186.61.83->10.186.60.68TCP29138858>mcs-mailsvr[PSH,ACK]Seq=340Ack=2347Win=36224Len=225TSval=2369606059TSecr=2369617053
150.00918964410.186.60.68->10.186.61.83TCP106mcs-mailsvr>38858[PSH,ACK]Seq=2347Ack=565Win=31104Len=40TSval=2369617054TSecr=2369606059
160.00944393610.186.61.83->10.186.60.68TCP13238858>mcs-mailsvr[PSH,ACK]Seq=565Ack=2387Win=36224Len=66TSval=2369606059TSecr=2369617054
170.00965640510.186.60.68->10.186.61.83TCP187mcs-mailsvr>38858[PSH,ACK]Seq=2387Ack=631Win=31104Len=121TSval=2369617054TSecr=2369606059
180.04964153210.186.61.83->10.186.60.68TCP6638858>mcs-mailsvr[ACK]Seq=631Ack=2508Win=36224Len=0TSval=2369606100TSecr=2369617054

#序号1-3的包,即TCP三次握手的过程
#1)110.186.61.83->10.186.60.68TCP7438858>mcs-mailsvr[SYN]Seq=0
#2)210.186.60.68->10.186.61.83TCP74mcs-mailsvr>38858[SYN,ACK]Seq=0Ack=1
#3)310.186.61.83->10.186.60.68TCP6638858>mcs-mailsvr[ACK]Seq=1Ack=1

2、四次挥手(在客户端执行exit命令后才会输出)
1986.74417350110.186.61.83->10.186.60.68TCP10038858>mcs-mailsvr[PSH,ACK]Seq=631Ack=2508Win=36224Len=34TSval=2369692794TSecr=2369617054
2086.74419455110.186.61.83->10.186.60.68TCP6638858>mcs-mailsvr[FIN,ACK]Seq=665Ack=2508Win=36224Len=0TSval=2369692794TSecr=2369617054
2186.74438941710.186.60.68->10.186.61.83TCP66mcs-mailsvr>38858[FIN,ACK]Seq=2508Ack=666Win=31104Len=0TSval=2369703789TSecr=2369692794
2286.74463220310.186.61.83->10.186.60.68TCP6638858>mcs-mailsvr[ACK]Seq=666Ack=2509Win=36224Len=0TSval=2369692795TSecr=2369703789

#序号20-22的包,为四次挥手的过程,这里由于服务器并没有数据要传输给客户端,所以将FIN和ACK合并在一个TCP包中了,即所谓的四次挥手变成了三次
#1)201986.74417350110.186.61.83->10.186.60.68TCP10038858>mcs-mailsvr[PSH,ACK]Seq=631Ack=2508
#2)2110.186.60.68->10.186.61.83TCP66mcs-mailsvr>38858[FIN,ACK]Seq=2508Ack=666
#3)2210.186.61.83->10.186.60.68TCP6638858>mcs-mailsvr[ACK]Seq=666Ack=2509

4TCP 包标志位的说明

TCP (传输控制协议)包头部有 6 个标志位(Flag),分别为 URG、ACK、PSH、RST、SYN、FIN,它们的十六进制值分别为:0x20、0x10、0x08、0x04、0x02、0x01,其中每个标志位的意义如下:

URG 标志:紧急指针是否有效

ACK 标志:确认号是否有效

PSH 标志:Push操作,尽可能快地将数据交给应用层

RST 标志:重置连接

SYN 标志:发起一个新的连接

FIN 标志:释放连接

5tshark 常见用法示例

1. tshark 以自定义字段来展示信息

--服务端执行抓包
dmp2(master)~#tshark-ieth0-dtcp.port==3332,mysql-f"host10.186.61.83andtcpport3332"-Tfields-eframe.time-eip.host-etcp.flags
Runningasuser"root"andgroup"root".Thiscouldbedangerous.
Capturingon'eth0'

#-Tfields,可以指定需要输出的字段,需配合-e一起使用,此处将分别打印获取包的时间、主机IP及TCP的标志位,这些字段会按照-e的顺序进行排列展示
#-e,支持多种协议下的字段展示,具体用法查询路径:Wireshark ->分析->显示过滤器表达式

--通过 MySQL 客户端连接实例,执行一个查询,再退出(共有 3 部分:连接、通信、断连)
{master}~#m3332-s
mysql:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.
mysql>select@@version;
@@version
5.7.36-log
mysql>exit

--观察屏幕输出
1、三次握手
"Jun6,20231442.839863403CST"10.186.61.83,10.186.60.680x00000002
"Jun6,20231442.839904347CST"10.186.60.68,10.186.61.830x00000012
"Jun6,20231442.840263352CST"10.186.61.83,10.186.60.680x00000010
"Jun6,20231442.840666158CST"10.186.60.68,10.186.61.830x00000018
"Jun6,20231442.841604106CST"10.186.61.83,10.186.60.680x00000010
"Jun6,20231442.841612112CST"10.186.61.83,10.186.60.680x00000018
"Jun6,20231442.841616568CST"10.186.60.68,10.186.61.830x00000010
"Jun6,20231442.842524996CST"10.186.61.83,10.186.60.680x00000018
"Jun6,20231442.842550796CST"10.186.60.68,10.186.61.830x00000010
"Jun6,20231442.848566815CST"10.186.60.68,10.186.61.830x00000018
"Jun6,20231442.848826004CST"10.186.61.83,10.186.60.680x00000010
"Jun6,20231442.850258537CST"10.186.61.83,10.186.60.680x00000018
"Jun6,20231442.850881377CST"10.186.60.68,10.186.61.830x00000018
"Jun6,20231442.851278991CST"10.186.61.83,10.186.60.680x00000018
"Jun6,20231442.851395808CST"10.186.60.68,10.186.61.830x00000018
"Jun6,20231442.851667278CST"10.186.61.83,10.186.60.680x00000018
"Jun6,20231442.851926804CST"10.186.60.68,10.186.61.830x00000018
"Jun6,20231442.892409030CST"10.186.61.83,10.186.60.680x00000010

#前三个包分别为:0x02 [SYN]、0x12 [SYN, ACK]、0x10[ACK],即三次握手的过程
#后面的几个包:0x18 [PSH, ACK]、0x10[ACK],是数据传输的过程

2、执行一个查询
"Jun6,20231419.967273148CST"10.186.61.83,10.186.60.680x00000018
"Jun6,20231419.967553321CST"10.186.60.68,10.186.61.830x00000018
"Jun6,20231419.967835719CST"10.186.61.83,10.186.60.680x00000010

#当TCP连接完成后,在数据传输过程中获取的包,其标志位为0x18[PSH,ACK]或0x10[ACK]

3、四次挥手
"Jun6,20231406.157240404CST"10.186.61.83,10.186.60.680x00000018
"Jun6,20231406.157833986CST"10.186.61.83,10.186.60.680x00000011
"Jun6,20231406.166359966CST"10.186.61.83,10.186.60.680x00000011
"Jun6,20231406.166378115CST"10.186.60.68,10.186.61.830x00000010
"Jun6,20231406.166971169CST"10.186.60.68,10.186.61.830x00000011
"Jun6,20231406.167317550CST"10.186.61.83,10.186.60.680x00000010

#看最后4个包,0x11[FIN,ACK]、0x10[ACK]、0x11[FIN,ACK]、0x10[ACK],这是标准的四次挥手过程

2. tshark 抓取 MySQL 中执行的 SQL

--在服务器上执行抓包
dmp2(master)~#tshark-f'tcpport3332'-Y"mysql.query"-dtcp.port==3332,mysql-Tfields-eframe.time-eip.src-eip.dst-emysql.query
Runningasuser"root"andgroup"root".Thiscouldbedangerous.
Capturingon'eth0'

#-Y,指定显示过滤器表达式,在单次分析中可以代替-R选项,此处表示仅显示mysql.query相关的包
#-d,用于指定该抓包会话的协议详细解析器模块,可以执行tshark-dhelp来查看可用的协议(执行虽然会报错,但会显示所有支持的协议),此处表示将3332端口上的TCP包以MySQL协议进行解析
#-Tfields-emysql.query,即可获取符合MySQL协议的SQL语句
#-eip.src-eip.dst的写法,也可以用-eip.host来替换

--先停止从库复制后再启动
zlm@10.186.60.74[(none)]>stopslave;
QueryOK,0rowsaffected(0.06sec)

zlm@10.186.60.74[(none)]>startslave;
QueryOK,0rowsaffected(0.05sec)

--观察屏幕输出
"Jun6,20231638.831359581CST"10.186.60.7410.186.60.68SELECTUNIX_TIMESTAMP()
"Jun6,20231638.832278722CST"10.186.60.7410.186.60.68SELECT@@GLOBAL.SERVER_ID
"Jun6,20231638.832613595CST"10.186.60.7410.186.60.68SET@master_heartbeat_period=1000000000
"Jun6,20231638.832861743CST"10.186.60.7410.186.60.68SET@master_binlog_checksum=@@global.binlog_checksum
"Jun6,20231638.833078690CST"10.186.60.7410.186.60.68SELECT@master_binlog_checksum
"Jun6,20231638.833278049CST"10.186.60.7410.186.60.68SELECT@@GLOBAL.GTID_MODE
"Jun6,20231638.833489342CST"10.186.60.7410.186.60.68SELECT@@GLOBAL.SERVER_UUID
"Jun6,20231638.833769721CST"10.186.60.7410.186.60.68SET@slave_uuid='90161133-88b1-11ed-bbcc-02000aba3c4a'

#通过指定MySQL协议解析模块,此处捕获到了MySQL从实例在启动复制时会执行的SQL语句
#如已用-d 选项指定了协议、端口等信息时,可省略-f(抓包过滤器表达式),除非还有其他的过滤需求,但不建议省略-Y(显示过滤器表达式),否则会输出非常多的信息,以下两种写法是等效的:
tshark-f'tcpport3332'-Y"mysql.query"-dtcp.port==3332,mysql-Tfields-eframe.time-eip.host-emysql.query
tshark-Y"mysql.query"-dtcp.port==3332,mysql-Tfields-eframe.time-eip.host-emysql.query

--获取类型为Query的SQL
dmp2(master)~#tshark-ilo-dtcp.port==3332,mysql-Y"mysql.command==3"-Tfields-eip.host-emysql.query-eframe.time-c10
Runningasuser"root"andgroup"root".Thiscouldbedangerous.
Capturingon'Loopback'
127.0.0.1,127.0.0.1STARTTRANSACTION"Jun7,20231729.194080437CST"
127.0.0.1,127.0.0.1insertignoreintouniverse.u_delay(source,real_timestamp,logic_timestamp)values('ustats',now(),0)"Jun7,20231729.194306733CST"
127.0.0.1,127.0.0.1updateuniverse.u_delaysetreal_timestamp=now(),logic_timestamp=logic_timestamp+1wheresource='ustats'"Jun7,20231729.194647464CST"
127.0.0.1,127.0.0.1COMMIT"Jun7,20231729.194953692CST"
4packetscaptured

#mysql.command=3,表示执行的SQL类型为Query,共支持30多种预设值
#对于熟悉DMP的小伙伴,一看便知这是由平台纳管的一个实例,当前正在做时间戳的写入(判断主从延时的依据)

--获取与show相关的SQL
dmp2(master)~#tshark-ilo-dtcp.port==3332,mysql-Y'mysql.querycontains"show"'-Tfields-eip.host-emysql.query-eframe.time-c10
Runningasuser"root"andgroup"root".Thiscouldbedangerous.
Capturingon'Loopback'
127.0.0.1,127.0.0.1showslavestatus"Jun7,20231744.672060318CST"
127.0.0.1,127.0.0.1showglobalstatus"Jun7,20231744.672808866CST"
127.0.0.1,127.0.0.1showglobalvariables"Jun7,20231744.672845236CST"
127.0.0.1,127.0.0.1showglobalvariableswhereVariable_name='innodb_flush_log_at_trx_commit'orVariable_name='sync_binlog'"Jun7,20231744.673036197CST"
4packetscaptured

dmp2(master)~#tshark-ilo-dtcp.port==3332,mysql-Y'mysql.querymatches"^show"'-Tfields-eip.host-emysql.query-eframe.time-c10
Runningasuser"root"andgroup"root".Thiscouldbedangerous.
Capturingon'Loopback'
127.0.0.1,127.0.0.1showglobalstatus"Jun7,20231702.671895630CST"
127.0.0.1,127.0.0.1showslavestatus"Jun7,20231702.671944388CST"
127.0.0.1,127.0.0.1showglobalvariables"Jun7,20231702.671998965CST"
127.0.0.1,127.0.0.1showmasterstatus"Jun7,20231702.672673795CST"
4packetscaptured

#contains使用字符串进行匹配,只要在数据包中存在指定的字符串,就会匹配成功,不论该字符串出现在查询的任何位置
#matches 支持使用正则表达式进行匹配,匹配符合指定规则的数据包,如:^show
#用contains/maches进行匹配查找时,关键词需用双引号包围,此时外层建议使用单引号,因为maches进行正则匹配时,外层使用双引号会报错,contains则不限制
#以上匹配方式类似模糊查询,但会区分大小写,如果指定Show或SHOW为关键词,可能获取不到SQL

3. tshark 抓取 OB 中执行 SQL

与之前的方法类似,只需调整 IP 地址和端口号即可。

--抓取5个mysql.query协议的包
[root@10-186-65-73~]#tshark-ilo-Y"mysql.query"-dtcp.port==2881,mysql-Tfields-eframe.time-eip.host-emysql.query-c5
Runningasuser"root"andgroup"root".Thiscouldbedangerous.
Capturingon'Loopback'
"Jun7,20231512.886615893CST"127.0.0.1,127.0.0.1select/*+MONITOR_AGENTREAD_CONSISTENCY(WEAK)*/__all_tenant.tenant_id,tenant_name,mem_used,access_count,hit_countfromv$plan_cache_statjoin__all_tenantonv$plan_cache_stat.tenant_id=__all_tenant.tenant_id
"Jun7,20231512.889500546CST"127.0.0.1,127.0.0.1select/*+MONITOR_AGENTREAD_CONSISTENCY(WEAK)*/tenant_name,tenant_id,casewhenevent_id=10000then'INTERNAL'whenevent_id=13000then'SYNC_RPC'whenevent_id=14003then'ROW_LOCK_WAIT'when(event_id>=10001andevent_id<= 11006) or (event_id >=11008andevent_id<= 11011) then 'IO' when event like 'latch:%' then 'LATCH' else 'OTHER' END event_group, sum(total_waits) as total_waits, sum(time_waited_micro / 1000000) as time_waited from v$system_event join __all_tenant on v$system_event.con_id = __all_tenant.tenant_id where v$system_event.wait_class <>'IDLE'and(con_id>1000orcon_id=1)groupbytenant_name,event_group
2packetscaptured

#执行抓包命令的服务器是OBServer集群内的一个节点,2881是OB的对外服务的端口号
#-c,指定抓取5个包,实际上只抓到了2个符合过滤条件的包
#从获取的SQL语句来看,猜测是由ocp_monagent监控组件发起的信息收集相关的SQL

--抓包时过滤包含“__all_”视图的SQL
[root@10-186-65-73~]#tshark-ilo-Y'mysql.querycontains"__all_"'-dtcp.port==2881,mysql-Tfields-eframe.time-eip.host-emysql.query-c5
Runningasuser"root"andgroup"root".Thiscouldbedangerous.
Capturingon'Loopback'
"Jun7,20231838.895171334CST"127.0.0.1,127.0.0.1select/*+MONITOR_AGENTREAD_CONSISTENCY(WEAK)*/tenant_name,tenant_id,stat_id,valuefromv$sysstat,__all_tenantwherestat_idIN(10000,10001,10002,10003,10004,10005,10006,140002,140003,140005,140006,40030,60019,60020,60024,80040,80041,130000,130001,130002,130004,20000,20001,20002,30000,30001,30002,30005,30006,30007,30008,30009,30010,30011,30012,30013,40000,40001,40002,40003,40004,40005,40006,40007,40008,40009,40010,40011,40012,40018,40019,50000,50001,50002,50004,50005,50008,50009,50010,50011,50037,50038,60000,60001,60002,60003,60004,60005,60019,60020,60021,60022,60023,60024,80057,120000,120001,120009,120008)and(con_id>1000orcon_id=1)and__all_tenant.tenant_id=v$sysstat.con_idandclass< 1000
"Jun  7, 2023 1838.896653822 CST"   127.0.0.1,127.0.0.1     select /*+ MONITOR_AGENT READ_CONSISTENCY(WEAK) */ tenant_id, tenant_name, sum(total_waits) as total_waits, sum(time_waited_micro) / 1000000 as time_waited from v$system_event join __all_tenant on v$system_event.con_id = __all_tenant.tenant_id where v$system_event.wait_class <>'IDLE'groupbytenant_name
2packetscaptured

[root@10-186-65-73~]#tshark-ilo-Y'mysql.querycontains"__all_"'-dtcp.port==2881,mysql-Tfields-eframe.time-eip.host-emysql.query>/tmp/monit_ob.txt
Runningasuser"root"andgroup"root".Thiscouldbedangerous.
Capturingon'Loopback'
124^C
Youhavemailin/var/spool/mail/root
[root@10-186-65-73~]#cat/tmp/monit_ob.txt|grep-iselect|wc-l

#可用此方法来获取一些常用的“__all_”视图相关的监控SQL
#将捕获的SQL重定向到文本文件,再用awk处理一下就能获取完整的SQL

[root@10-186-65-73~]#awk-F""'{for(i=7;i<=NF;i++)printf("%s ", $i);print ""}' /tmp/monit_ob.txt|cat -n|head -5
     1  select /*+ MONITOR_AGENT READ_CONSISTENCY(WEAK) */ zone, name, value, time_to_usec(now()) as current from __all_zone
     2  select /*+ MONITOR_AGENT READ_CONSISTENCY(WEAK) */ __all_tenant.tenant_id, tenant_name, cache_name, cache_size from __all_virtual_kvcache_info, __all_tenant where __all_tenant.tenant_id = __all_virtual_kvcache_info.tenant_id and svr_ip = '10.186.65.73' and svr_port = 2882
     3  select /*+ MONITOR_AGENT READ_CONSISTENCY(WEAK) */ case when cnt is null then 0 else cnt end as cnt, tenant_name, tenant_id from (select __all_tenant.tenant_name, __all_tenant.tenant_id, cnt from __all_tenant left join (select count(1) as cnt, tenant as tenant_name from __all_virtual_processlist where svr_ip = '10.186.65.73' and svr_port = 2882 group by tenant) t1 on __all_tenant.tenant_name = t1.tenant_name) t2
     4  select /*+ MONITOR_AGENT READ_CONSISTENCY(WEAK) */ case when cnt is null then 0 else cnt end as cnt, tenant_name, tenant_id from (select __all_tenant.tenant_name, __all_tenant.tenant_id, cnt from __all_tenant left join (select count(`state`='ACTIVE' OR NULL) as cnt, tenant as tenant_name from __all_virtual_processlist where svr_ip = '10.186.65.73' and svr_port = 2882 group by tenant) t1 on __all_tenant.tenant_name = t1.tenant_name) t2
     5  select /*+ MONITOR_AGENT READ_CONSISTENCY(WEAK) */ __all_tenant.tenant_id, tenant_name, mem_used, access_count, hit_count from v$plan_cache_stat join __all_tenant on v$plan_cache_stat.tenant_id = __all_tenant.tenant_id 

4. tshark 抓包后用 Wireshark 解析

tshark 也可以像 tcpdump 一样,先在服务器上抓包,再拿到 Wireshark 的图形窗口中做进一步分析。

--抓取50个包并生成pcap文件
dmp2(master)~#tshark-dtcp.port==3332,mysql-f'tcpport3332andhost10.186.61.83'-c50-w/tmp/61_83.pcap
Runningasuser"root"andgroup"root".Thiscouldbedangerous.
Capturingon'eth0'

#注意,-w 指定的文件无需提前创建,但抓包会话必须对该目录有写入权限,否则会报权限不足的错误。

以下截图为三次握手和四次挥手的过程。

7872b7c8-0c16-11ee-962d-dac502259ad0.png   7898cb16-0c16-11ee-962d-dac502259ad0.png

同样地,也可以在 Wireshark 中将 mysql.query 字段展示出来:Wireshark -> 编辑 -> 首选项 -> 外观 -> 列

78c6d7a4-0c16-11ee-962d-dac502259ad0.png

以下显示过滤器表达式中的内容表示:将包中 TCP 端口为 3332,源端 IP 地址为 10.186.60.74,协议类型为 MySQL 的内容过滤并展示,效果如图:

78f30356-0c16-11ee-962d-dac502259ad0.png

6结语

tshark 作为 Wireshark 的命令行工具,与我们比较熟悉的 tcpdump 相比,有其不少优点:

1. 更多的过滤条件

具有比 tcpdump 更多的过滤条件,可以更加精确地过滤所需的数据包,tshark 支持 Wireshark 过滤器语法的全部特性,并提供了更高级的功能。

2. 更加灵活的输出格式

可以以不同的文件格式和标准输出打印输出捕获数据,而 tcpdump 的输出格式非常有限。

3. 更好的可读性和易用性

输出会更加易于阅读,因为它会对分组进行解析并显示其中包含的各种数据,比如协议、参数和错误信息等。这些信息对数据包分析非常有帮助。

4. 更加轻量级

相比于 tcpdump,占用的系统资源较少,并且不需要将所有数据存储在内存中,从而能够处理更大的数据流。

5. 更多的网络协议

支持更多的网络协议,包括 IPv6、IS-IS、IPX 等,而 tcpdump 支持的协议种类相对较少。

综上,在一些较为复杂的数据包分析和网络问题诊断场景中,推荐使用 tshark,而对于只需快速捕捉网络流量的简单应用场景,tcpdump 可能会更适合一些。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据库
    +关注

    关注

    7

    文章

    3591

    浏览量

    63373
  • 开源
    +关注

    关注

    3

    文章

    2989

    浏览量

    41720
  • MySQL
    +关注

    关注

    1

    文章

    775

    浏览量

    26006
  • DBA
    DBA
    +关注

    关注

    0

    文章

    18

    浏览量

    7842
  • Wireshark
    +关注

    关注

    0

    文章

    46

    浏览量

    6449

原文标题:DBA抓包神器tshark测评

文章出处:【微信号:OSC开源社区,微信公众号:OSC开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    CC2530 packet sniffer 为什么不到,?

    我用packet sniffer 软件,芯片用的是CC2530,想协调器给终端设备发送的信道和pandid值,但是抓取不到,不知道为什么?只有MAXC层有数据,NWK层和应用层都没有数据,求大神指点?
    发表于 03-14 10:53

    终端节点为什么无法

    终端节点为什么无法?终端节点收不到协调器无线发送的数据包打断点调试协调器无线发送成功,终端节点开启低功耗模式,并且轮询设置为5s,每5s向协调器发送data request请求。不知道为什么无法
    发表于 03-16 10:27

    CC2640 使用BTool怎么用?

    CC2640使用BTool怎么用?我一直用simpleBLEPeripheral改写的程序,烧写simpleBLEPeripheral,使用BTool,出现[/url]。使用p
    发表于 03-16 11:27

    CC1310 无法1Mbps

    (*.prs)已经实现50Kbps,但现在1Mbps还未成功。CC1111 user guide里面貌似最大速率为500kbs。这里想确定下CC1111是不能完美兼容CC131
    发表于 03-28 14:24

    史上最好用的BLE神器!没有之一

    先给张应用示例图: 主程序: 协议解析使用Wireshark: 常用器对比: 结论:1,Hollong BLE Sniffer 可以同时,注意是同时,不是分时轮询,是真正意义上的同时,所以可以
    发表于 06-21 10:33

    WIZnet芯片通讯时怎么?

    `Q:WIZnet芯片进行公网通讯或者芯片间通讯的话怎么?A:芯片和PC通讯的话可以直接通过Wireshark,如果芯片和公网直接通讯或者通讯是发生在芯片之间,则没有办法直接
    发表于 03-13 11:32

    Packet Sniffer遇到的问题

            我用的是CCDebuger +CC2531 USB Dongle,按照TI官方文档的顺序进行,每次出来的数据基本上全都是错的,按用户指南说的是数据解析错误,但是具体要怎么去解决呢?请教各位,谢谢!
    发表于 06-01 02:30

    加密后分析的问题?

    请问一下,我的zigbee设备全部都开启了加密, 使用软件的时候,数据都是加密的,我应该怎么解密分析这些数据呢,谢谢了
    发表于 06-01 14:22

    请问蓝牙USB Dongle是否可以蓝牙2.0数据

    各位社区朋友, 现在蓝牙USB Dongle可以蓝牙4.0数据,是否可以2.0数据呢? 有没有只蓝牙2.0,或者蓝牙2.0/4.0
    发表于 09-26 10:32

    cc2640的simpleblebroadcaster例程不到

    我把simpleblebroadcaster例程改成5*5封装的配置编译烧写到cc2640上但是我用包工具u*** dongle,不到,为什么?
    发表于 03-09 09:36

    wireshark数据分析问题

    用网络调试助手作为Tcp Server给STM32F429发送数据,每次传输完21845bytes后,就出现问题。用WireShark的数据有些不太理解。上图为用串口调试助手调试后的信息,每次传输到21846bytes就接收不到了。以上为网络
    发表于 04-08 04:35

    如何使用WireShark进行网络

      如何使用WireShark进行网络:准备工作、wireshark 主界面介绍、封包列表介绍
    发表于 04-02 07:05

    空口方式和wireshank分析工具使用介绍

    主要介绍下最近使用中感觉很万能的空口方式和wireshank分析工具使用;目的:抓取各种设备网络通信过程中数据,定位并分析软硬件设计中问题背景:Tcp
    发表于 01-18 09:11

    MCU_Wireshark USB的过程是怎样的?

    MCU_Wireshark USB的过程是怎样的?
    发表于 02-11 07:38

    请问BLE-Dongle是否支持协议分析?请问怎么进行协议分析?

    如题,请问贵司的BLE-Dongle是否支持协议分析?请问怎么进行协议分析?
    发表于 09-07 07:12