利用tcpdump抓取mysql sql语句

这个脚本是我之前在网上无意间找个一个利用tcpdump 抓包工具获取mysql流量,并通过过滤把sql 语句输入。

脚本不是很长,但是效果很好。

#!/bin/bash
#this script used montor mysql network traffic.echo sql
tcpdump -i eth0 -s 0 -l -w - dst port 3306 | strings | perl -e '
while(<>) { chomp; next if /^[^ ]+[ ]*$/;
    if(/^(SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER|CALL)/i)
    {
        if (defined $q) { print "$q\n"; }
        $q=$_;
    } else {
        $_ =~ s/^[ \t]+//; $q.=" $_";
    }
}'

下面是执行脚本的输出:

 

SELECT b.id FROM module as a,rights as b where a.id=b.module_id and b.sid='179' and a.pname like 'vip/member_order_manage.php%'
SELECT count(id) as cc,sum(cash) as total from morder_stat_all  where (ymd BETWEEN '1312214400' and '1312336486') and depart_id=5 an
d order_class=2
select id,name from media where symd='0000-00-00'
select id,name from depart where s_flag=' '  and onoff=1 order by sno
select id,name from plank where depart_id=5  and onoff=1 order by no
select id,name from grp where plank_id=0  and onoff=1 order by no
select id,CONCAT(pname,'-',name) as name from pvc order by pname
select id,CONCAT(no,'-',name) as name from local where pvc_id=0 order by no
select id,name from product_breed
select color_name from product_color where id=5
select id,name from product where id = '0'
select * from morder_stat_all  where (ymd BETWEEN '1312214400' and '1312336486') and depart_id=5 and order_class=2 order by ymd DESC
 LIMIT 0,50
select urlkey from sys_config where id=1
select name from morder where id=7195793
select no,name from staff where id=5061
select product_id,amt,price0 from order_product where order_id = 7195793
select concat_ws('/',name,NULLIF((select color_name as cn from product_color where id=color_id),''),NULLIF((select style_name from p
roduct_style where id=style_id),'')) as name,spec,weight,price from product where id = 16938
select concat_ws('/',name,NULLIF((select color_name as cn from product_color where id=color_id),''),NULLIF((select style_name from p
roduct_style where id=style_id),'')) as name,spec,weight,price from product where id = 19005
select name from morder where id=7195768
select no,name from staff where id=221
select product_id,amt,price0 from order_product where order_id = 7195768
select concat_ws('/',name,NULLIF((select color_name as cn from product_color where id=color_id),''),NULLIF((select style_name from p
roduct_style where id=style_id),'')) as name,spec,weight,price from product where id = 18978
select concat_ws('/',name,NULLIF((select color_name as cn from product_color where id=color_id),''),NULLIF((select style_name from p
roduct_style where id=style_id),'')) as name,spec,weight,price from product where id = 18282
select concat_ws('/',name,NULLIF((select color_name as cn from product_color where id=color_id),''),NULLIF((select style_name from p
roduct_style where id=style_id),'')) as name,spec,weight,price from product where id = 19740

 

从上面的日志可以看出,脚本的功能还是很强大吧 。

时间: 2024-10-06 11:50:22

利用tcpdump抓取mysql sql语句的相关文章

通过tcpdump抓取mysql语句分析故障

近期在对mysql例行检查时候,发现有台服务器竟然把千兆内网跑慢了.相当异常,但通过show processlist并为发现异常的进程在运行中. 仔细看了后,发现是个sleep,若kill掉后,流量马上就下降了,但它究竟在做什么呢? 为了进一步定位出问题来,想到之前用过的脚本tcpdump分析下是什么内容一直在占用带宽.  代码如下 复制代码 #!/bin/bash #this script used montor mysql network traffic.echo sql tcpdump -

[20140212]linux下使用tcpdump抓取sql语句

[20140212]linu下使用tcpdump抓取sql语句.txt 我们生产系统问题多多,经常要跟踪用户执行的sql语句,当出现问题时要跟踪比较麻烦,我需要一个快捷的方式"看到"用户执行的sql语 句,想到了tcpdump抓包软件. 我测试建立shell脚本如下: #! /bin/bash /usr/sbin/tcpdump -l -i eth0 -s 16384 -A -nn src host $1 and dst port 1521 --说明: -- -l     Make s

SQL Server定时自动抓取耗时SQL并归档数据脚本分享

原文:SQL Server定时自动抓取耗时SQL并归档数据脚本分享 SQL Server定时自动抓取耗时SQL并归档数据脚本分享 第一步建库 USE [master] GO CREATE DATABASE [MonitorElapsedHighSQL] GO 第二步创建sp_who3存储过程 -- http://sqlserverplanet.com/dba/a-better-sp_who2-using-dmvs-sp_who3 USE [MonitorElapsedHighSQL] GO CR

利用curl抓取远程页面内容的示例代码

利用curl抓取远程页面内容的一个小示例,需要的朋友可以过来参考下   最基本的操作如下 复制代码 代码如下: $curlPost = 'a=1&b=2';//模拟POST数据 $ch = curl_init(); curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-FORWARDED-FOR:0.0.0.0', 'CLIENT-IP:0.0.0.0'));  //构造IP curl_setopt($ch, CURLOPT_REFERER, "ht

MySQL sql语句 mybatis

问题描述 MySQL sql语句 mybatis mybatis sql 语句中将数据库中的字段当作参数传入,sql中成了 '字段名' = ? 就是字段名前后都会加上单引号, 请问有方法可以去除字段名前后的单引号吗? 解决方案 http://blog.csdn.net/binyao02123202/article/details/8594050 解决方案二: 在字段 加上 这个 <![CDATA[${字段}]]> = '某个值' 如果是你需要的请采纳 解决方案三: 0023-mybatis在m

oracle-oravcle sql语句转换为mysql sql语句

问题描述 oravcle sql语句转换为mysql sql语句 请问在oracle中的插入语句是insert into ACT_HI_ACTINST (ID_ PROC_DEF_ID_ START_TIME_)values ('2698' 'M0008C020:3:12504'to_timestamp('20-03-2015 14:31:17.274000');若换到mysql中那个to_timestamp()那段该怎么替换 解决方案 mysql的sql语句MySQL 常用SQL语句mysql

mysql:sql语句,想了半天没头绪,请教大家

问题描述 mysql:sql语句,想了半天没头绪,请教大家 收货人 收货地址 订单号 用户ID 张三 北京 1001 1 张四 上海 1002 2 张五 北京 1003 3 张六 广州 1004 4 张三 深圳 1005 5 张七 上海 1006 6 现在有这样的一个需求,每一行假定是一条订单记录,收货人和收货地址字段任意一项与其他订单一致,即认为是关联订单 如果关联订单大于3条,就把这条订单对应的用户ID记录下来.最终要的就是用户ID的列表. 比如:**订单号1001和订单号1005的收货人都

tcpdump抓取移动终端的数据包

问题描述 tcpdump抓取移动终端的数据包 C:UsersTJW>adb devicesList of devices attached5066adc2 device C:UsersTJW>adb shellshell@cancro:/ $ suroot@cancro:/ # adb push e:/tcpdump /data/localerror: device not found1|root@cancro:/ # chmod 777 /data/localroot@cancro:/ #1

iameter-为什么tcpdump抓取的包都是I包,没有U包和T包

问题描述 为什么tcpdump抓取的包都是I包,没有U包和T包 只有CCR与CCA的INITIAL_REQUEST的交互没有update和Term的CCR与CCA 解决方案 设置的过滤条件对不对 解决方案二: tcpdump有很多参数的