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

    文章

    3792

    浏览量

    64340
  • 开源
    +关注

    关注

    3

    文章

    3299

    浏览量

    42458
  • MySQL
    +关注

    关注

    1

    文章

    804

    浏览量

    26519
  • DBA
    DBA
    +关注

    关注

    0

    文章

    18

    浏览量

    7880
  • Wireshark
    +关注

    关注

    0

    文章

    49

    浏览量

    6509

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

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

收藏 人收藏

    评论

    相关推荐

    经典蓝牙解析说明

    在无线通信协议的开发过程中,器是工程师们不可或缺的工具。掌握器的使用,就如同拥有了能够洞察无线电波的“火眼金睛”。这不仅使我们能够验证发出的数据
    的头像 发表于 07-24 09:04 1905次阅读
    经典蓝牙<b class='flag-5'>抓</b><b class='flag-5'>包</b>解析说明

    CC2640 使用BTool怎么用?

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

    WIZnet芯片通讯时怎么?

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

    加密后分析的问题?

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

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

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

    http神器(http analyzer )下载

    HTTP Analyzer Full V7是一款完全汉化免费的绿色版HTTP协议捕捉分析工具,这款http analyzer 绿色版可以进行网络等功能,马上下载这款http analyzer
    发表于 12-14 08:35 0次下载

    Wireshark数据网络协议的分析

    Wireshark 是目前最受欢迎的包工具。它可以运行在 Windows、Linux 及 MAC OS X 操作系统中,并提供了友好的图形界面。同时,Wireshark 提供功能强大的数据功能
    发表于 10-12 08:00 1次下载
    Wireshark数据<b class='flag-5'>抓</b><b class='flag-5'>包</b>网络协议的分析

    USB数据软件程序下载

    USB数据软件程序下载
    发表于 09-09 16:01 9次下载

    MCU_Wireshark USB 过滤(特定端口地址)

    启动WiresharkUSB的过程如下,这里点击“开始”就可以进入界面了。不过,Wireshark启动USB
    发表于 12-08 16:36 14次下载
    MCU_Wireshark USB <b class='flag-5'>抓</b><b class='flag-5'>包</b>过滤(<b class='flag-5'>抓</b>特定端口地址)

    为什么不到baidu的数据

    从上面的结果可以知道请求baidu.com时会去访问39.156.66.10。于是用下面的tcpdump命令进行,大概的意思是eth0网卡且ip为39.156.66.10的网络
    的头像 发表于 01-05 10:43 1027次阅读

    渗透测试过程中所使用的方法

    本篇只是简单分享平常笔者渗透测试过程中所使用的方法,后面会继续更新其他以及安卓端的方法,比较适合没理解过这方面的新手作参考。
    的头像 发表于 02-01 15:41 1575次阅读

    Linux之tshark包工具安装和使用

    tshark是一个网络协议分析器。它允许您从实时网络捕获数据数据,或者从以前保存的捕获文件读取数据,或者将这些数据的解码形式打印到标准输出,或者将数据
    的头像 发表于 05-22 14:33 2230次阅读

    如何抓取app数据 网络原理及实现

    要实现对App的网络数据,需要监控App与服务器交互之间的网络节点,监控其中任意一个网络节点(网卡),获取所有经过网卡中的数据,对这些数据按照网络协议进行解析,这就是的基本原理
    发表于 08-11 09:30 3198次阅读
    如何抓取app数据<b class='flag-5'>包</b> 网络<b class='flag-5'>抓</b><b class='flag-5'>包</b>原理及实现

    如何利用eNSP进行实验?

    使用Wireshark工具进行ping,并分析报文
    的头像 发表于 09-12 09:32 4220次阅读
    如何利用eNSP进行<b class='flag-5'>抓</b><b class='flag-5'>包</b>实验?

    CentOS中使用tcpdump

    CentOS中使用tcpdump
    的头像 发表于 10-28 14:48 218次阅读