yum install -y wireshark
最近才发现,原来wireshark也提供有Linux命令行工具-tshark。tshark不仅有抓包的功能,还带了解析各种协议的能力。下面我们以两个实例来介绍tshark工具。
tshark -s 512 -i eth0 -n -f 'tcp dst port 3306' -R 'mysql.query' -T fields -e mysql.query
-s 512 :只抓取前512个字节数据
-s 捕获快照长度
设置默认的快照长度来使用 当捕获实时数据。 顶多每个网络包的快照长度字节会被读入到内存或者保存到磁盘。
一个值为65536,那么整个包会被捕获 这是默认的
这个选项可以发生很多次,
-n 禁用网络对象名字解析(比如主机名,TCP和UDP 端口名字)
-f <capture filter>
Set the capture filter expression. 设置捕获过滤器表达式
-f 'tcp dst port 3306' :只捕捉协议为tcp,目的端口为3306的数据包
tshark -i eth1 -n -f 'tcp dst port 3306' -R 'mysql.query' -T fields -e mysql.query
-R 'mysql.query' :过滤出mysql.query
-T fields -e mysql.query :打印mysql查询语句
-e 字段
增加一个字段到字段的列表来显示 如果 -F 字段是选择的,这个选项可以使用多次在命令行 至少一个字段是必须提供的
tshark -s 65536 -n -i eth0 -R 'mysql.query' -T fields -e "ip.src" -e "mysql.query"
tshark -s 65536 -n -i eth1 -R 'mysql.query' -T fields -e "ip.src" -e "mysql.query"
zabbix:/root# tshark -s 65536 -n -i eth1 -f 'tcp dst port 3306' -R 'mysql.query||mysql.user' -T fields -e ip.addr -e tcp.port -e frame.time -e mysql.user -e mysql.query
tshark -i eth1 -n -f 'tcp dst port 3306' -R 'mysql.query matches "^(?!(?i)select).*" || mysql.user' -T fields -e ip.addr -e tcp.port -e frame.time -e mysql.user -e mysql.query
tshark -s 65536 -n -i eth1 -f 'tcp dst port 3306' -R 'mysql matches "delete|DELETE|Delete|UPDATE|update|Update|insert|INSERT|Insert"' -T fields -e ip.addr -e tcp.port -e frame.time -e mysql.user -e mysql.query
抓包:
Vsftp:/data02/audit# tshark -s 65536 -n -i eth1 -f 'tcp dst port 3306' -R 'mysql matches "delete|DELETE|Delete|UPDATE|update|Update|insert|INSERT|Insert"' -T fields -e ip.addr -e tcp.port -e frame.time -e mysql.user -e mysql.query
Running as user "root" and group "root". This could be dangerous.
Capturing on eth1
192.168.11.185,192.168.11.187 47677,3306 Dec 7, 2016 15:21:24.751464505 delete from t1
192.168.11.185,192.168.11.187 47677,3306 Dec 7, 2016 15:21:25.302466232 delete from t1
192.168.11.185,192.168.11.187 47677,3306 Dec 7, 2016 15:21:25.767454007 delete from t1
mysql 5.6版本有源IP和源端口
但是mysql 5.1 版本就比较特殊:
192.168.5.17 3306 Dec 7, 2016 15:25:12.290737000 delete from async_message where id=598756
192.168.5.17 3306 Dec 7, 2016 15:25:12.291717000 UPDATE real_time_room_sta SET is_live='F' WHERE hotel_group_id=1 and hotel_id=555
192.168.5.17 3306 Dec 7, 2016 15:25:12.294355000 UPDATE real_time_room_sta SET is_live='T' WHERE hotel_group_id=1 and hotel_id=555 AND rmno IN('201','202','209','223','225','237','253','255','269')
504 packets captured
[root@pms-db-bf audit]# tshark -s 65536 -n -i eth0 -f 'tcp dst port 3306' -R 'mysql matches "(?i)delete|update|insert"' -T fields -e ip.addr -e tcp.port -e frame.time -e mysql.user -e mysql.query
就抓不到源端口和源IP
tshark -s 65536 -n -i eth1 -f 'tcp dst port 3306' -R 'mysql matches "(?i)delete|update|insert"' -T fields -e ip.addr -e tcp.port -e frame.time -e mysql.user -e mysql.query
原因 tshark 版本不同:
Vsftp:/data02/audit# tshark -version
TShark 1.8.10 (SVN Rev Unknown from unknown)
[root@pms-db-bf sbin]# tshark -version
TShark 1.0.15
CentOS 5.8 升级tshark
Vsftp:/data02/audit# rpm -qa | grep wireshark
wireshark-1.8.10-17.el6.x86_64
[root@pms-db-bf sbin]# rpm -qa | grep wireshark
wireshark-1.0.15-7.el5_11