[发明专利]旁路式解析和还原TNS协议中SQL命令的方法有效
申请号: | 201210261746.9 | 申请日: | 2012-07-26 |
公开(公告)号: | CN102801714A | 公开(公告)日: | 2012-11-28 |
发明(设计)人: | 徐明;孔飞;郑宁;张海平;徐建 | 申请(专利权)人: | 杭州电子科技大学 |
主分类号: | H04L29/06 | 分类号: | H04L29/06;H04L12/56;H04L29/08 |
代理公司: | 杭州求是专利事务所有限公司 33200 | 代理人: | 杜军 |
地址: | 310018 浙*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 旁路 解析 还原 tns 协议 sql 命令 方法 | ||
1.旁路式解析和还原TNS协议中SQL命令的方法,该方法采用旁路获取网络中客户端对Oracle数据库服务器发送的TNS协议数据包,并进行过滤、缓存和解析,最后还原出客户端完整的SQL命令,其特征在于该方法包括以下步骤:
步骤(1)利用开源库libpcap或winpcap中的函数pcap_findalldevs( )获取并输出所有网络设备接口号、名称和描述信息;
步骤(2)从步骤(1)中输出的所有网络设备接口号中选择需要捕获的网络设备接口号作为指定的数据捕获网络设备接口;
步骤(3)设置device参数为指定打开的网络设备接口名称,捕获数据的最大字节数参数snaplen为65535,网络设备接口工作模式参数promisc为1,超时时间参数为1000毫秒,准备好函数出错返回NULL时用于传递错误消息的参数ebuf,调用libpcap或winpcap中的函数pcap_open_live( ),打开步骤(2)中指定的数据捕获网络设备接口,使其处于混杂模式捕获其连接网络的所有数据,并将函数pcap_open_live( )的返回值保存到变量adhandle中;
步骤(4)以变量adhandle为输入参数,调用libpcap或winpcap中的函数pcap_datalink( )判断捕获数据的数据链路层类型,若函数pcap_datalink( )的返回值为DLT_EN10MB,则捕获的数据链路层类型为以太网,进入步骤(5),否则结束;
步骤(5)设置包过滤参数packet_filte为“TCP”,优化参数optimize为1,网络掩码参数netmask为数据捕获网络设备接口所在网络的掩码,调用libpcap或winpcap中的函数pcap_compile()和pcap_setfilter(),编译包过滤表达式“TCP”进入驱动程序并设置使其起作用;
步骤(6)设置回调函数参数为自定义的packet_handler()函数,调用libpcap或winpcap中的pcap_loop( )函数,开始循环捕获网络数据帧,根据包过滤表达式对每个数据帧调用回调函数packet_handler()解析出其中的SQL语句。
2.根据权利要求1所述的旁路式解析和还原TNS协议中SQL命令的方法,其特征在于:所述的回调函数packet_handler()的处理步骤包括:
步骤(1)根据以太帧格式,将指向以太帧指针加上14个字节偏移得到指向IP数据包头结构指针值,将其保存到变量ipHeader中;
步骤(2)根据IP协议数据包格式,读取ipHeader结构中第4-7个bit的首部长度字段值ipHeaderLen,计算出IP头部长度为ipHeaderLen×4字节;
步骤(3)根据IP协议数据包格式,将指向IP数据包头结构指针加上IP数据包头长度个字节偏移,即ipHeaderLen×4个字节偏移,得到指向TCP数据包头结构指针值,将其保存到变量TCPHeader中;
步骤(4)根据TCP协议数据包格式,读取第2-3字节的目的端口字段信息,将端口字段信息从网络顺序转变为主机顺序并保存到变量dPort中;若dPort值为Oracle TNS协议服务端口则进入步骤(5),否则回调函数处理结束;
步骤(5)根据TCP协议格式,读取TCPHeader结构中第12字节开始4个bit的首部长度字段值tcpHeaderLen,计算出TCP数据包头部长度为tcpHeaderLen×4字节;
步骤(6)根据TCP协议数据包格式,将指向TCP数据包头结构指针加上TCP数据包头长度个字节偏移,即tcpHeaderLen×4个字节偏移,得到指向TNS数据包头结构指针值,将其保存到变量tnsHeader中;
步骤(7)根据TNS协议数据包格式,将指向TNS数据包头结构指针tnsHeader加上10个字节偏移,得到指向TNS负载数据部分的指针值,将其保存到变量tnsData中;
步骤(8)分别读取tnsData指针的第零、第一和第三个字节值并将其保存到变量zeroByte、oneByte和threeByte中;根据zeroByte、oneByte和threeByte的值情况分别选择步骤8.1、8.2或8.3中的一步来执行;
8.1 若zeroByte值为0x03,oneByte值为0x5e,且threeByte值为0x61;则数据包中包含Select命令语句,执行以下步骤:
(1)赋值偏移变量offset为95,读取tnsData+offset指针指向的命令串长度值,将其保存到变量cmdLen中;
(2)将offset值加1,并将tnsData+offset保存到tnsCMDStart变量中;
(3)对tnsData+offset指针指向的字符进行检测,若字符为可打印字符且offset-95< cmdLen,则将offset加1,并重复执行步骤(3),否则将tnsData+offset保存到变量tnsCMDEnd中;
(4)从tnsCMDStart指针指向的字符开始到tnsCMDEnd指针指向的字符为止,将字符串拷贝出来即为完整的Select命令;
8.2 若zeroByte值为0x03,oneByte值为0x5e,且threeByte值为0x21;则数据包中包含CREATE、DROP、INSERT或ALTER命令语句,执行以下步骤:
(1)赋值偏移变量offset为95,读取tnsData+offset指针指向的命令串长度值,将其保存到变量cmdLen中;
(2)offset值加1,并将tnsData+offset保存到tnsCMDStart变量中;
(3)对tnsData+offset指针指向的字符进行检测,若字符为可打印字符且offset-95< cmdLen,则将offset加1,并重复执行步骤(3),否则将tnsData+offset值保存到变量tnsCMDEnd中;
(4)从tnsCMDStart指针指向的字符开始到tnsCMDEnd指针指向的字符为止,将字符串拷贝出来即为完整的CREATE、DROP、INSERT或ALTER命令;
8.3 若zeroByte值为0x03,oneByte值为0x77,且threeByte值为0x21;则数据包中包含DESC命令语句,执行以下步骤:
(1)赋值偏移变量offset为24,读取tnsData+offset指针指向的命令串长度值,将其保存到变量cmdLen中;
(2)offset值加1,并将tnsData+offset保存到tnsCMDStart变量中;
(3)对tnsData+offset指针指向的字符进行检测,若字符为可打印字符且offset-24< cmdLen,则将offset加1,并重复执行步(3),否则tnsData+offset保存到变量tnsCMDEnd中;;
(4)从tnsCMDStart指针指向的字符开始到tnsCMDEnd指针指向的字符为止,将字符串拷贝出来即为完整的DESC命令语句。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于杭州电子科技大学,未经杭州电子科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210261746.9/1.html,转载请声明来源钻瓜专利网。