@[TOC]从网卡中截获sql server的sql语句
从网卡中截获sql server的sql语句
前两年写过一个从网卡上直接截获sql server的插入和查询语句的小东西,今天想起来,放着也没用,不如贴出来,大家讨论共同进步!
设计思路
1.借助wireshark工具拆解网卡数据包,了解包结构;
网卡上的数据包存在拆包和合包的问题,即一个数据包可能含有多个完整的请求数据,也可能一个完整的请求数据被拆成了多个数据包,这里可以根据数据包的开始结束标志位和数据包标识位来完成拆包合包动作。
2. 了解sql server的TDS协议,并拆解TDS协议包,此处由于TDS协议并未完全开放,参照了github上某位大神的tds协议说明,最终捕获了insert和select语句;
3. 代码级数据包捕获是利用pcap4j来实现的;
4. 通过kafka推送捕获的键值。
设计实现
此处放上最核心的代码即RPC协议解析部分,其它就不赘述了,看的懂得,有兴趣的可以共同讨论。
/**
* RPC数据解析
* @throws UnsupportedEncodingException
*/
public List parseRpc(byte[] tds){
// tds包全长
// int size = tds[3]& 0xFF |(tds[2]& 0xFF)<<8;;
new Utiles().parseTdsHead(tdsHeader,td