当前位置: 首页 > news >正文

广告网站推荐触屏手机网站建设

广告网站推荐,触屏手机网站建设,wordpress跑步,苏州北京网站建设本文是上篇 TNSAnalysis 的修改版。 参考文档:oracle_tns协议.doc ( http://download.csdn.net/detail/afer198215/4413480 ) 建立连接时#xff0c;oracle客户端先向oracle服务器 发送客户端可以使用的最高tns版本连接请求包#xff0c;服务器会回应一个等于或…本文是上篇 TNSAnalysis 的修改版。 参考文档:oracle_tns协议.doc ( http://download.csdn.net/detail/afer198215/4413480 ) 建立连接时oracle客户端先向oracle服务器 发送客户端可以使用的最高tns版本连接请求包服务器会回应一个等于或小于客户端要求tns版本的响应包 服务器回应包中的tns版本才是双方通信的真实tns版本。 上篇TNSAnalysis的代码分析oracle10以上TNS协议存在问题本文做部分修改。 以下代码可以分析出 请求类型、连接请求中的TNS协议版本、连接请求字符串、sql请求字符串 支持tns v312(oracle 9)、tns v313(oracle 10)及部分tns v314(oralce 11尚不确定sql解析是否正确)。 package org.sl.analysis.tns;import org.sl.util.Utility;/*** TNS分析接口* author shanl**/ abstract public class TNSAnalysis {/**TNS请求头标志长度8*/public static final int REQUEST_HEADER_LENGTH 8;/**请求类型:连接*/public static final short REQUEST_TYPE_CONNECTION 1; /**请求类型:SQL*/public static final short REQUEST_TYPE_SQL 6; /**响应类型:接收*/public static final short RESPONSE_TYPE_RECEIVE 2;/**请求类型:未知*/public static final short REQUEST_TYPE_UNKNOW -1;protected byte[] requestData null;protected int requestOffset 0;protected int requestLen 0; /*** 设置tns请求数据,并返回请求类型* param request 请求数据 * param offset 请求数据偏移量* param len 请求数据长度* return 返回请求类型*/public int setRequest(byte[] request, int offset, int len){this.requestData request;this.requestOffset offset;this.requestLen len;return getRequestType();}/*** 返回请求类型* return*/public int getRequestType(){return requestData[requestOffset4];}/*** 返回连接请求的tns版本br/* 只有当getRequestType()返回值为REQUEST_TYPE_CONNECTION有效.* return 如果当前请求类型不是REQUEST_TYPE_CONNECTION那么返回-1.*/public int getRequestTNSVersion(){int ver -1;if(REQUEST_TYPE_CONNECTION getRequestType()){ver Utility.byte2Short(requestData, requestOffset8);}return ver;}/*** 返回连接请注字符串br/* 只有当getRequestType()返回值为REQUEST_TYPE_CONNECTION有效.* return*/abstract public String getConnectData();/*** 返回sql请求字符串* 只有当getRequestType()返回值为REQUEST_TYPE_SQL有效.* return*/abstract public String getSqlData(); }package org.sl.analysis.tns;import org.sl.util.Utility;/*** TNS版本313对应oracle 9.2* author shanl**/ public class TNSV312 extends TNSAnalysis{Overridepublic String getConnectData() {if(0x01!this.requestData[4]){return ;}int offset REQUEST_HEADER_LENGTH; //        int dataLen (0xff00(data[offset16]2)) | (0x00ffdata[offset17]); //        int dataOffset (0xff00(data[offset18]2)) | (0x00ffdata[offset19]);int dataLen Utility.byte2Short(requestData, offset16);int dataOffset Utility.byte2Short(requestData, offset18);byte[] buffer new byte[dataLen];int po 0;if(dataLen0){return ;}for(int idataOffset,enddataOffsetdataLen; iend; i,po){if(0x00!this.requestData[i]){buffer[po] this.requestData[i];}else{buffer[po] ;}}//        return new String(data, dataOffset, dataLen);return new String(buffer,0,dataLen);}Overridepublic String getSqlData() {String sql ;int offset 84;if(0x03requestData[10] 0x5ErequestData[11]){sql parse035e(82);}else if(0x11requestData[10] 0x69requestData[11]){sql parse1169(offset);}else if(0x11requestData[10] 0x6brequestData[11]){sql parse116b(offset);}else if(0x03requestData[10] 0x3ErequestData[11]){ //如果标志为01则skip6*8sql parse033e01(offset);}else if(0x03requestData[10] 0x47requestData[11]){ //如果标志为01则skip15*85sql parse034701(offset);}else{ //            System.out.println(type:Integer.toHexString(data[10]),Integer.toHexString(data[11]));}return sql;}public String parse034701(int _offset){String sql ;int offset _offset12;int skip 6*81;if(0x01requestData[_offset5] || 0x02requestData[_offset5]){sql parse03xx01(offset, skip);}else if(0x03requestData[_offset12]){sql parse035e(offset);}else{sql ;}return sql;}public String parse033e01(int _offset){String sql ;int offset _offset12;int skip 15*85;if(0x01requestData[_offset5] || 0x02requestData[_offset5]){sql parse03xx01(offset, skip);}else if(0x03requestData[_offset12]){sql parse035e(offset);}else{sql ;}return sql;}private String parse03xx01(int offset, int skip){String sql ;int c offset;int len 0;int position 0;byte[] buffer new byte[this.requestLen];//        if(0x01requestData[offset] || 0x02requestData[offset]){         //            //is sql //        }else{ //            return ; //        }c skip;if((byte)0xFE requestData[c]){            do{len requestData[c];                    for(int ic1,endilen; iend; i){if(0x00 ! requestData[i]){buffer[position] requestData[i];}else{buffer[position] ;}}c len;}while(len!0);                }else{//非大数量len requestData[c];for(int ic1,endilen; iend; i){if(0x00 ! requestData[i]){buffer[position] requestData[i];}else{buffer[position] ;}    }}    sql new String(buffer, 0, position);return sql;}public String parse035e(int offset){String sql ;byte[] buffer new byte[this.requestLen];int skip 81;int c offset;int len 0;int position 0;if(0x03!requestData[c] || 0x5e!requestData[c]){ //            System.out.println(非sql请求.);return ;}c skip;if((byte)0xFE requestData[c]){            do{len requestData[c];                    for(int ic1,endilen; iend; i){if(0x00 ! requestData[i]){buffer[position] requestData[i];}else{buffer[position] ;}}c len;}while(len!0);                }else{//非大数量len requestData[c];for(int ic1,endilen; iend; i){if(0x00 ! requestData[i]){buffer[position] requestData[i];}else{buffer[position] ;}    }}    sql new String(buffer, 0, position);return sql;}public String parse116b(int offset){int _offset offset112;return parse035e(_offset);        }public String parse1169(int offset){int _offset offset112;return parse035e(_offset);        } } package org.sl.analysis.tns;import org.sl.util.Utility;/*** TNS版本313对应oracle 10* author shanl**/ public class TNSV313 extends TNSAnalysis{Overridepublic String getConnectData() {if(0x01!this.requestData[4]){return ;}int offset REQUEST_HEADER_LENGTH; //        int dataLen (0xff00(data[offset16]2)) | (0x00ffdata[offset17]); //        int dataOffset (0xff00(data[offset18]2)) | (0x00ffdata[offset19]);int dataLen Utility.byte2Short(requestData, offset16);int dataOffset Utility.byte2Short(requestData, offset18);byte[] buffer new byte[dataLen];int po 0;if(dataLen0){return ;}for(int idataOffset,enddataOffsetdataLen; iend; i,po){if(0x00!this.requestData[i]){buffer[po] this.requestData[i];}else{buffer[po] ;}}//        return new String(data, dataOffset, dataLen);return new String(buffer,0,dataLen);}Overridepublic String getSqlData() {String sql ;int offset 84;if(0x03requestData[10] 0x5ErequestData[11]){sql parse035e(82);}else if(0x11requestData[10] 0x69requestData[11]){sql parse1169(offset);}else if(0x11requestData[10] 0x6brequestData[11]){sql parse116b(offset);}else if(0x03requestData[10] 0x3ErequestData[11]){ //如果标志为02则skip6*8sql parse033e01(offset);}else if(0x03requestData[10] 0x47requestData[11]){ //如果标志为02则skip15*85sql parse034701(offset);}else{ //            System.out.println(type:Integer.toHexString(data[10]),Integer.toHexString(data[11]));}return sql;}public String parse034701(int _offset){String sql ;int offset _offset12;int skip 6*81;if(0x01requestData[_offset5] || 0x02requestData[_offset5]){sql parse03xx01(offset, skip);}else if(0x03requestData[_offset12]){sql parse035e(offset);}else{sql ;}return sql;}public String parse033e01(int _offset){String sql ;int offset _offset12;int skip 15*85;if(0x01requestData[_offset5] || 0x02requestData[_offset5]){sql parse03xx01(offset, skip);}else if(0x03requestData[_offset12]){sql parse035e(offset);}else{sql ;}return sql;}private String parse03xx01(int offset, int skip){String sql ;int c offset;int len 0;int position 0;byte[] buffer new byte[this.requestLen];//        if(0x01requestData[offset] || 0x02requestData[offset]){         //            //is sql //        }else{ //            return ; //        }c skip;if((byte)0xFE requestData[c]){            do{len requestData[c];                    for(int ic1,endilen; iend; i){if(0x00 ! requestData[i]){buffer[position] requestData[i];}else{buffer[position] ;}}c len;}while(len!0);                }else{//非大数量len requestData[c];for(int ic1,endilen; iend; i){if(0x00 ! requestData[i]){buffer[position] requestData[i];}else{buffer[position] ;}    }}    sql new String(buffer, 0, position);return sql;}public String parse035e(int offset){String sql ;byte[] buffer new byte[1024*1024*2];int skip 93;int c offset;int len 0;int position 0;if(0x03!requestData[c] || 0x5e!requestData[c]){ //            System.out.println(非sql请求.);return ;}c skip;if((byte)0xFE requestData[c]){            do{len requestData[c];                    for(int ic1,endilen; iend; i){if(0x00 ! requestData[i]){buffer[position] requestData[i];}else{buffer[position] ;}}c len;}while(len!0);                }else{//非大数量len requestData[c];for(int ic1,endilen; iend; i){if(0x00 ! requestData[i]){buffer[position] requestData[i];}else{buffer[position] ;}    }}    sql new String(buffer, 0, position);return sql;}public String parse116b(int offset){int _offset offset112;return parse035e(_offset);        }public String parse1169(int offset){int _offset offset112;return parse035e(_offset);        } } package org.sl.analysis.tns;import java.io.UnsupportedEncodingException;import org.sl.util.Utility;/*** TNS版本314对应oracle 11* author shanl**/ public class TNSV314 extends TNSAnalysis{Overridepublic String getConnectData() {if(0x01!this.requestData[4]){return ;}int offset REQUEST_HEADER_LENGTH;int dataLen Utility.byte2Short(requestData, offset16);int dataOffset Utility.byte2Short(requestData, offset18)10;byte[] buffer new byte[dataLen];int po 0;if(dataLen0){return ;}for(int idataOffset,enddataOffsetdataLen; iend; i,po){if(0x00!this.requestData[i]){buffer[po] this.requestData[i];}else{buffer[po] ;}}// return new String(data, dataOffset, dataLen);try {return new String(buffer,0,dataLen, ISO-8859-1);} catch (UnsupportedEncodingException e) {return new String(buffer,0,dataLen); }}Overridepublic String getSqlData(){throw new RuntimeException(未完成.);}public String getSqlDataV313() {String sql ;int offset 84;if(0x03requestData[10] 0x5ErequestData[11]){sql parse035e(82);}else if(0x11requestData[10] 0x69requestData[11]){sql parse1169(offset);}else if(0x11requestData[10] 0x6brequestData[11]){sql parse116b(offset);}else{ // System.out.println(type:Integer.toHexString(data[10]),Integer.toHexString(data[11]));}return sql;}public String parse035e(int offset){String sql ;byte[] buffer new byte[1024*1024*2];int skip 93;int c offset;int len 0;int position 0;if(0x03!requestData[c] || 0x5e!requestData[c]){ // System.out.println(非sql请求.);return ;}c skip;if((byte)0xFE requestData[c]){ do{len requestData[c]; for(int ic1,endilen; iend; i){if(0x00 ! requestData[i]){buffer[position] requestData[i];}else{buffer[position] ;}}c len;}while(len!0); }else{//非大数量len requestData[c];for(int ic1,endilen; iend; i){if(0x00 ! requestData[i]){buffer[position] requestData[i];}else{buffer[position] ;} }} sql new String(buffer, 0, position);return sql;}public String parse116b(int offset){int _offset offset112;return parse035e(_offset); }public String parse1169(int offset){int _offset offset112;return parse035e(_offset); } }package org.sl.analysis.tns;/*** tns V312V313* author shanl**/ public class TNSV312_V313 extends TNSAnalysis{TNSAnalysis v312 new TNSV312();TNSAnalysis v313 new TNSV313();Overridepublic String getConnectData() {String sql ;sql v312.getConnectData();if(.equals(sql)){sql v313.getConnectData();}return sql;}Overridepublic String getSqlData() {String sql ;sql v312.getSqlData();if(.equals(sql)){sql v313.getSqlData();}return sql;}}package org.sl.analysis.tns; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; import org.sl.util.Utility; /** * TNS分析器的工厂类 * author shanl * */ public class TNSAnalyFactory{ /**TNS版本312,对应oracle 9*/ public static final short TNS_VERSION_312 312;     /**TNS版本313,对应oracle 10*/ public static final short TNS_VERSION_313 313;     /**TNS版本314,对应oracle 11*/ public static final short TNS_VERSION_314 314; /**未知的tns版本*/ public static final short TNS_VERSION_UNKNOW -1; private static MapShort,Class? extends TNSAnalysis dict null; static{ dict new HashMapShort,Class? extends TNSAnalysis(20); dict.put(TNS_VERSION_UNKNOW, TNSV312_V313.class); dict.put(TNS_VERSION_312, TNSV312.class); dict.put(TNS_VERSION_313, TNSV313.class); dict.put(TNS_VERSION_314, TNSV314.class); } /** * 注册一个指定版本的tns分析类 * param tnsVersion * param analyClass */ synchronized public static void registerTNSAnalyClass(short tnsVersion, Class? extends TNSAnalysis analyClass){ if(nullanalyClass){ return; } dict.put(tnsVersion, analyClass); } /** * 移除一个指定版本的tns分析类 * param tnsVersion * return */ synchronized public static Class? extends TNSAnalysis removeTNSAnalyClass(short tnsVersion){ return dict.remove(tnsVersion); } /** * 得到一个当前已注册类合集的复本 * return 不会返回null */ synchronized public static MapShort,Class? extends TNSAnalysis duplicate(){ MapShort,Class? extends TNSAnalysis nd new HashMapShort,Class? extends TNSAnalysis(20); SetShort keys dict.keySet(); if(keys.isEmpty()){ return nd; } for(Short key:keys){ nd.put(key, dict.get(key)); } return nd; } /** * 返回指定版本的分析类实例 * param tnsVersion * return 如果找不到则返回v312v313;否则,返回指定tns版本分析类实例. */ synchronized public static TNSAnalysis getTNSAnalyInstance(Short tnsVersion){ TNSAnalysis instance null; Class? extends TNSAnalysis cs null; try{ if(dict.containsKey(tnsVersion)){ cs dict.get(tnsVersion); instance cs.newInstance(); }else{ instance new TNSV312_V313(); } }catch(Exception ex){ throw new RuntimeException(ex.getMessage()); } return instance; } /** * 从请求中得到tns版本 * param requestData * param offset     * return 返回-1表示不是含有tns版本的请求 */ synchronized public static short getTNSVersionFromRequest(byte[] requestData, int offset){ short ver -1; if(TNSAnalysis.REQUEST_TYPE_CONNECTIONrequestData[offset4]){ ver Utility.byte2Short(requestData, offset8); } return ver; } /** * 从响应中得到tns版本 * param responseData * param offset     * return 返回-1表示不是含有tns版本的响应 */ synchronized public static short getTNSVersionFromResponse(byte[] responseData, int offset){ short ver -1; if(TNSAnalysis.RESPONSE_TYPE_RECEIVEresponseData[offset4]){ ver Utility.byte2Short(responseData, offset8); } return ver; }     } 测试类: package test;import org.sl.analysis.tns.TNSAnalyFactory; import org.sl.analysis.tns.TNSAnalysis; import org.sl.analysis.tns.TNSV314;public class Test6 {public static void main(String[] args){ // t3();t2(); // t1();}static void t3(){String hexStr 00F00000010000000138012C000008007FFF860E0000010000B6003A000002006161000000000000000000000D4C0001A4D80000000000000000284445534352495054494F4E3D28414444524553533D2850524F544F434F4C3D5443502928484F53543D3139322E3136382E322E32332928504F52543D31353231292928434F4E4E4543545F444154413D28534552564943455F4E414D453D697032356F72636C29284349443D2850524F4752414D3D443A5C746F6F6C735C504C53514C20446576656C6F7065725C504C53514C4465762E6578652928484F53543D504336372928555345523D7368616E6C29292929; byte[] bys new byte[hexStr.length()/2];int hex 0;int c 0;int len 0; // TDSAnalyForSybase tds new TDSAnalyForSybase();for(int i0,j0,endihexStr.length(); iendi; j){hex Integer.valueOf(hexStr.substring(i, i2), 16);bys[j] (byte)hex; }short tnsVer TNSAnalyFactory.getTNSVersionFromRequest(bys, 0);System.out.println(tnsVer);TNSAnalysis sis TNSAnalyFactory.getTNSAnalyInstance(tnsVer);sis.setRequest(bys, 0, bys.length);System.out.println(request:sis.getConnectData());}static void t2(){String hexStr // 00200000020000000139000108007FFF01000000002061410000000000000000; 00200000020000000138000008007FFF01000000002061410000000000000000;byte[] bys new byte[hexStr.length()/2];int hex 0;int c 0;int len 0; // TDSAnalyForSybase tds new TDSAnalyForSybase();for(int i0,j0,endihexStr.length(); iendi; j){hex Integer.valueOf(hexStr.substring(i, i2), 16);bys[j] (byte)hex; }short tnsVer TNSAnalyFactory.getTNSVersionFromResponse(bys, 0);System.out.println(tnsVer);}static void t1(){String hexStr 003A000001000000013A012C004120007FFFC60E0000010000EF003A00000800616100000000000000000000000000000000000000000000000000F90000060000000000284445534352495054494F4E3D28434F4E4E4543545F444154413D285345525645523D4445444943415445442928534552564943455F4E414D453D697032356F72636C29284349443D2850524F4752414D3D433A5C446F63756D656E74733F616E643F53657474696E67735C41646D696E6973747261746F725C3F3F3F3F5C506C53716C4465762E6578652928484F53543D4E44544B4D4B574C384559545035422928555345523D41646D696E6973747261746F7229292928414444524553533D2850524F544F434F4C3D5443502928484F53543D3139322E3136382E322E32332928504F52543D31353231292929;byte[] bys new byte[hexStr.length()/2];int hex 0;int c 0;int len 0; // TDSAnalyForSybase tds new TDSAnalyForSybase();for(int i0,j0,endihexStr.length(); iendi; j){hex Integer.valueOf(hexStr.substring(i, i2), 16);bys[j] (byte)hex; }TNSAnalyFactory.registerTNSAnalyClass((short) 314, TNSV314.class);short tnsVer TNSAnalyFactory.getTNSVersionFromRequest(bys, 0);System.out.println(tns version:tnsVer);TNSAnalysis sis TNSAnalyFactory.getTNSAnalyInstance(tnsVer);sis.setRequest(bys, 0, bys.length);System.out.println(connect:sis.getConnectData());} }
http://www.hkea.cn/news/14471147/

相关文章:

  • 如何建设自己的网站 知乎咨询公司招聘
  • 沈阳想做网站网络推广培训1对1
  • 望城警务督察网站建设北京工程信息交易网
  • 竹子建站怎么样注册公司流程和费用注册资金
  • 有趣的h5创意设计太原seo优化
  • 网站建设荣茂汝城网站建设
  • 网站建设资料总结网站 seo优化
  • 登录名修改wordpressseo咨询岳阳
  • 手机网站 免费济南建站哪家好
  • 网站备案时网站没有内容可以做游戏用什么电脑系统下载网站好
  • wordpress主题开发电子书太原优化网站
  • jsp和php做网站那个快上海高端网站建设公
  • 做任务领佣金的网站源码商洛做网站多少钱
  • 阿里云建设网站好吗国外公司建站系统
  • 网站建设和维护的教程网络营销对企业的优势
  • mysql8 wordpress济南百度seo
  • 江苏省交通工程建设局网站天津建设工程信息网站
  • 版面设计的目的是什么seo免费优化软件
  • 服装网站模板下载定制网站建设
  • 河北省住房和城乡建设厅网站查询百度联盟申请
  • 网站怎么创建论坛最好网站开发公司电话
  • 上饶哪里培训网站建设清远网站seo公司
  • 建设网站需要多少时间电商网站运营怎么做
  • 招聘网站套餐费用怎么做分录国家市场监督管理
  • 百度 如何 关键字 网站域名 关联wordpress前台登录注册密码找回
  • 网站备案是域名备案还是空间备案公众号做淘宝客接入手机网站
  • 易语言做网站登录器建设网站怎么创建数据库
  • 那些域名可以做后缀做网站前端前景怎么样
  • 网站设计哪里公司好惠州做百度网站多少
  • 辽宁鞍山网站建设frp可以做网站吗