版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、ORACLE!、议分析1 TNS介绍TNS协议是ORACLE服务端和客户端通讯的协议。TNS协议传输可以使用TCP/IP协议、使用SSL的TCP/IP协议、命名管道和IPC协议传输,其中TCP/IP协议传输是使用明文传送。这里我们只分析基于TCP/IP协议上的TNS数据。ORACLE网络通讯协议TNS有许多版本,并且大部分向下兼容,我们主要oracle.0客户和服务间的传输协议,他的协议版本号为312,其兼容到300。TNS协议有一个通用的头,通用头包含一个请求数据类型。不同的服务请求和数据传输使用不同的请求数据类型。对于通常意义的查询操作一般使用数据类型,当出现错误或其他情况时
2、可能使用其他类型。在分析过程中发现以下类型数据:查询语句出错会用标记(marker)类型客户端向服务器请求失败(如不存在的服务ID),服务器会发送拒绝(refuse)类型客户机登陆会发送连接类型,而服务器返回一个重定向类型数据当重定向端口连接完成后客户端重现发送连接类型数据,服务器返回接受类型数据,然后能够正常通讯。2 TNS数据格式TNS数据包含一个通用的包头,这个包头包含包校验,包长度和包类型等信息。不同的类型的数据实现不同功能的数据传输。CommonPacketHeader8通用包头Data可变数据2.1通用包头格式每个TNS完整数据都包含一个通用包头,他说明接受数据的长度及其相关校验和
3、解析的信息。Length2包的长度,包括通用包头Packetchecksum2包的校验和Type1TNS类型Flag1状态Headerchecksum2通用头的校验和Length:包长度(包括包头)Type:数据包的类型类型号类型说明1连接(CONNECT)2接受(ACCEPT)3确认(ACK)4拒绝(REFUTE)5重定向(REDIRECT)6数据(DATA)7NULL89中止(ABORT)1011重新发送(RESEND)12标记(MARKER)13AIIENTION14控制(CONTROL)2.2连接包结构(0x01)在客户端和ORACLE要建立连接时,客户端首先发送一个连接结构,然后服务
4、器返回重定向包(参见2.5)。typedefstructTNS_CONNECT_headerUCHARNS_ver2;UCHARCompatible_ver2;UCHARser_opt1;UCHARser_opt2;UCHARSDU_size2;UCHARTDU_size2;UCHARNT_protocol_ch1;UCHARNT_protocol_ch2;UCHARMax_packets2;UCHARHardware_12;UCHARdata_length2;UCHAROffset2;UCHARMax_data4;UCHARflag0;UCHARflag1;/*javathininterfa
5、cehasnoitemsandid,ifitisnotjdbcthin,useoffsettooverridethese有些版本TNS协议中没有下面几项*/UCHARitem14;UCHARitem24;UCHARID8;UCHARunknown8;/*followedbydecode_des_conn_data*/连接字符串TNS_CONNECT_HEADER;连接字符串格式:连接功能连接字符串PING(CONNECT_DATA=(COMMAND=ping);SHOW(CONNECT_DATA=(COMMAND=SHOWLOGFILE);VERSION(CONNECT_DATA=(COMMA
6、ND=version);STATUS(CONNECT_DATA=(COMMAND=STATUS);ESTABLISH(CONNECT_DATA=(SID=OBJ_SRVR)(CID=(PROGRAM=)(HOST=11)(USER=SOME_USER);ESTABLISH_REAL_DB(CONNECT_DATA=(SID=wouprd)(CID=(PROGRAM=)(HOST=)(USER=some_user);SERVICE_REGISTER(CONNECT_DATA=(COMMAND=service_register)(LOAD=0)
7、(MAXLOAD=1)(INSTANCE_LOAD=0)(INSTANCE_MAXLOAD=0)(SHUTDOWN_NOTIFY=ON)(FLAGS=0)(SERVICE=obj_srvr)(INFO=PID$COLON$pid)(DISPLAY=PRESPAWNEDSERVER)(SERVICE_ID=BBB99B99999B-99BB-B999-B99BB9999B99)(CLASS=ORACLE)(VERSION=81500)(ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=$port);REDIRECT(ADDRESS=(PROTOCO
8、L=tcp)(HOST=76)(PORT=$port);如:数据库一般的连接,即ESTABLISH的连接字符串为:(DESCRIPTIONS(ADDRESS=(PROTOCOL=TCP)(HOST=topsec-syangjp)(PORT=1521)(CONNECT_DATA=(SID=test)(SERVER=DEDICATED)(CID=(PROGRAM=D:oracleora92binsqlplusw.exe)(HOST=TOPSEC-MYANGJP)(USER=myangjp)connectVersion:312version(compafible):200+
9、iserviceoptions:OxOcOlsessionoaxaunitsize;2048Max-imuniTransmissionBataUnitSize:32767±1MTProtocclCliaracreristies:Ox7f08LineTurnaroundvalue:0valueof1inHardware;100LengthofConnectData:3.53offsettoconnectDara:mumarnnn-Arrrr>rW7右WWL07日9634000&C29105fl45Obd2QQQ0W8印0000i»孑Mw-土.pww-ww447/
10、c0aS1656375我faW8皿QOdJdce42_c-vo5550-856-1Ooo4445254m3m匚a4e3s901Cid1ou5e9d398fe43OU2443722425RIPTION_DATA=(GRAF1=5qST=ubunER=Zhll1RE55=(PRP)(HO5T,101.98)=CONNE匚SERVICE(CIO=(Plp1U5)(TU99)(Un)(ADOTTOCOL=19Z.16B(PORT=l52.3接受包结构(0X02)用户重定向之后,需要用重定向端口向服务器发送连接,客户端发送连接包,服务器连接成功则返回接受包,否则返回refuse包structTNS_AC
11、CEPT_headerunsignedcharNS_ver2;unsignedcharser_opt1;unsignedcharser_opt2;unsignedcharSDU_size2;unsignedcharTDU_size2;unsignedcharHardware_12;unsignedchardata_length2;unsignedcharOffset2;unsignedcharflag0;unsignedcharflag1;/unsignedcharunknown8;/*nofollowingdata*/2.4拒绝包结构(0x04)typedefstructTNS_REFUSE
12、_headerUCHARuUserRefuseReason;UCHARuSysRefuseReason;unsignedshortintdata_length;拒绝字符串TNS_REFUSE_HEADER;拒绝字符串:REFUTE(DESCRIPTION=(TMP=)(VSNNUM=153092352)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4)2.5重定向包结构(0x05)typedefstructTNS_REDIRECT_headerUCHARdata_length2;UCHARdata;/长度为data_length;重定向数据T
13、NS_REDIRECT_HEADER;重定向数据:REDIRECT(ADDRESS=(PROTOCOL=tcp)(HOST=76)(PORT=$port);2.6标记包结构(0x0c)typedefstructTNS_MARKER_headerUCHARdata_length3;TNS_REDIRECT_HEADER;注:当请求命令出错时,服务器会返回三个标记包2.7控制包结构(0x0d)暂时没有发现该结构2.8数据包结构(0x06)数据包负责传输数据库客户端和服务端的各种操作。每个操作由一个或几个命令组成,可以是在同一个数据包中有几个命令结构组合起来,也可以分开传输
14、一些命令。CommonHeader8通用包头Dataflag2状态Commandpacket可变数据Commandpacket可变数据.Commandpacket可变数据具体各种操作命令的组成和转换现在还不能完全确定,但是对于一些基本的SQL查询我们是可以分析的,下面我们主要分析一些命令结构和相关ORACLE操作的命令组成序列。有些有许多结构和它的具体字节不影响ORACLE基本命令的分析,所以只做了简单的分析,对于SQL的一般查询语句TNS协议主要通过数据包的0x0303和0x035e命令来传输数据,返回结果主要是通过0x06和0x08命令传输数据,0x06主要传输数据,0x08主要传输系统配
15、置相关数据。2.8.1数据包通用结构数据包有一个2字节的状态包和多个命令包组成:Dataflag2状态Commandpacket可变命令包.-.Commandpacket可变命令包Data_flag一般情况为零,分析发现退出时为0x0040Sendtoken0x0001RequestConfirmation0x0002Confirmation0x0004Reserved0x0008UNKNOWN0x0010MoreDatatoCome0x0020EndofFile0x0040DoImmediateConfirmation0x0080Requesttosend0x0100RequestNtTra
16、iler0x0200命令包(Commandpacket)结构如下:Command1命令Subcommand1子命令Data可变命令包数据命令(Command)说明(以下命令为主命令的基本功能,但是还不能完全确认)0x01SetProtocol0x02SetDataTypeRepresentation0x03UsertoOracleRequest0x04ReturnStatus0x05AccessUserAddressSpace0x06RawTransferHeader0x07RawTransferData0x08ReturnOPI(OracleProgramInterface)Paramete
17、r0x09OracleFunctionComplete0x0aNErrorReturnDefinition0x0bSendingI/oVectoronlyforfastUPI(UserProgramInterface)0x0cSendingLongforFastUPI0x0dInvokeUserCallback0x0eNetworkService0x0fDataIntergrity0x10Supervisor0x110x12通过分析具体的包和一些其他相关软件,得到以下相关命令和子命令,许多命令还需要进一步确认命令子命令类型说明使用0x010x05请求CLIENTTYPE0x010x06SetP
18、rotocol0x010x2cIDENT0x020x00RESET0x020x01CHAR_MAP0x020x540x030x010x030x02SQL_OPEN0x030x03QUERY0x030x04QUERYSECOND0x030x05FETCHMORE0x030x080x030x09DISCONNECT0x030x0E0x030x27SET_LANG0x030x2BDESC_COLS0x030x3BDBVERSION0x030x47FETCH0x030x51Setpassword0x030x52Setuser0x030x54HANDSHAKE40x030x5ESQL0x030x73AU
19、TH20x030x76AUTH10x030x77查询表结构信息DESC0x040x01ACK0x040x02ACK0x040x05ACK0x060x00MoreRowResultInfo0x060x01FirstRowResultInfo0x080x010x080x050x080x080x080x9cDbversion0x100x19FieldInfoSELEC返回0x110x690x110x6b0x110x782.8.2 DataFormat(length+data)对于ORACLE的TNS协议结构中数据传输,其主要采用以下方式,即用一个标志和长度字符来传输数据。具体格式如下如果开始的大数据
20、标志为0xfe,则结构如下BigDataIdentify1DataLength1返回列数DataDataLength.DataLength1如果DataDataLengthDataLength10如果开始的大数据标志不为0xfe,则结构如下:DataLength1返回列数DataDataLength字符串格式(1)Char(n),ncharData可变实际数据Data1可变空格注:数据和数据1总长度为n(2)Varchar(n)Data可变(<=n)实际数据数字格式(1)正数Id1C0+整数部分长度整数部分Intlength=Id-c0小数部分DecLengt
21、h=length-intlength-1数据的第一位标志整数部分长度整数部分长度+小数部分长度=数据总长度-1整数部分从后向前每两位(代表0到100)用一个字节(十六进制)表示,且为十六进制值-1小数部分从后向前每两位(代表0到100)用一个字节(十六进制)表示,且为十六进制值-1如果没有小数部分,Intlength+1>length(为数字长度),则后面有(Intlength+1-length)位(只传输位)值为0的数据没有传输(2)负数Id13f-整数部分长度整数部分Intlength=3f-id小数部分DecLength=length-intlength-1Magic10x66数据的第一位标志整数部分长度整数部分长度+小数部分长度=数据总长度-2整数部分从后向前每两位(代表0到100)用一个字节(十六进制)表示,且为101-十六进制值小数部分从后向前每两位(代表0到100)用一个字节(十六进制)表示,且为101-十六进制值如果没有小数部分,Intlength+2>length(为数字长度),则后面有(Intlength+2-length)位(只传输位)值为0的数据没有传输日期格式Year11Year1-100Year21Year2-100Mo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023年驻马店辅警招聘考试真题及答案详解(典优)
- 2023年石嘴山辅警协警招聘考试真题含答案详解(研优卷)
- 2023年葫芦岛辅警协警招聘考试真题及答案详解(历年真题)
- 2024年三门峡辅警协警招聘考试真题及答案详解(真题汇编)
- 2023年遵义辅警招聘考试真题含答案详解(基础题)
- 2024年上饶辅警招聘考试真题及答案详解(易错题)
- 2024年宿州辅警招聘考试题库及完整答案详解
- 2024年临汾辅警招聘考试题库附答案详解(综合题)
- 2024年临汾辅警招聘考试真题附答案详解(突破训练)
- 2024年云浮辅警招聘考试题库附答案详解(培优b卷)
- 信贷业务风险防范培训课件
- 2023急性中耳炎多学科团队救治中国专家共识(全文)
- 医学检验技术职业生涯规划
- 设备管理基础知识
- 办公室会务培训课件
- 第2章-考古学研究方法与步骤
- 中国石油大学(北京)工业流变学考试要点
- (word完整版)CAD机械制图练习图
- 布朗芬布伦纳生态心理学课件
- 封头尺寸及重量
- GB/T 6569-2006精细陶瓷弯曲强度试验方法
评论
0/150
提交评论