ORACLETNS协议分析.doc

上传人:h**** 文档编号:664318 上传时间:2018-10-26 格式:DOC 页数:23 大小:1.44MB
下载 相关 举报
ORACLETNS协议分析.doc_第1页
第1页 / 共23页
ORACLETNS协议分析.doc_第2页
第2页 / 共23页
ORACLETNS协议分析.doc_第3页
第3页 / 共23页
ORACLETNS协议分析.doc_第4页
第4页 / 共23页
ORACLETNS协议分析.doc_第5页
第5页 / 共23页
点击查看更多>>
资源描述

1、ORACLE 协议分析1 TNS 介绍TNS 协议是 ORACLE 服务端和客户端通讯的协议。TNS 协议传输可以使用 TCP/IP 协议、使用 SSL 的 TCP/IP 协议、命名管道和 IPC 协议传输,其中 TCP/IP 协议传输是使用明文传送。这里我们只分析基于 TCP/IP 协议上的 TNS 数据。ORACLE 网络通讯协议 TNS 有许多版本,并且大部分向下兼容,我们主要 oracle 9.2.0.1.0 客户和服务间的传输协议,他的协议版本号为 312,其兼容到 300。TNS 协议有一个通用的头,通用头包含一个请求数据类型。不同的服务请求和数据传输使用不同的请求数据类型。对于通

2、常意义的查询操作一般使用数据类型,当出现错误或其他情况时可能使用其他类型。在分析过程中发现以下类型数据: 查询语句出错会用标记(marker)类型 客户端向服务器请求失败(如不存在的服务 ID) ,服务器会发送拒绝( refuse)类型 客户机登陆会发送连接类型,而服务器返回一个重定向类型数据 当重定向端口连接完成后客户端重现发送连接类型数据,服务器返回接受类型数据,然后能够正常通讯。2 TNS 数据格式TNS 数据包含一个通用的包头,这个包头包含包校验,包长度和包类型等信息。不同的类型的数据实现不同功能的数据传输。Common Packet Header 8 通用包头Data 可变 数据2.

3、1 通用包头格式每个 TNS 完整数据都包含一个通用包头,他说明接受数据的长度及其相关校验和解析的信息。Length 2 包的长度,包括通用包头Packet check sum 2 包的校验和Type 1 TNS 类型Flag 1 状态Header check sum 2 通用头的校验和注:Length:包长度(包括包头)Type: 数据包的类型类型号 类型说明1 连接(CONNECT)2 接受(ACCEPT)3 确认(ACK)4 拒绝(REFUTE)5 重定向(REDIRECT)6 数据(DATA )7 NULL89 中止(ABORT)1011 重新发送(RESEND)12 标记(MARKE

4、R)13 ATTENTION14 控制(CONTROL)2.2 连接包结构(0x01)在客户端和 ORACLE 要建立连接时,客户端首先发送一个连接结构,然后服务器返回重定向包(参见 2.5) 。typedef struct TNS_CONNECT_headerUCHAR NS_ver2;UCHAR Compatible_ver2;UCHAR ser_opt1;UCHAR ser_opt2;UCHAR SDU_size2;UCHAR TDU_size2;UCHAR NT_protocol_ch1;UCHAR NT_protocol_ch2;UCHAR Max_packets2;UCHAR Ha

5、rdware_12;UCHAR data_length2;UCHAR Offset2;UCHAR Max_data4;UCHAR flag0;UCHAR flag1;/*java thin interface has no items and id,if it is not jdbc thin, use offset to override these有些版本 TNS 协议中没有下面几项*/UCHAR item14;UCHAR item24;UCHAR ID8;UCHAR unknown8;/*followed by decode_des_conn_data */连接字符串TNS_CONNEC

6、T_HEADER;连接字符串格式:连接功能 连接字符串PING (CONNECT_DATA=(COMMAND=ping);SHOW (CONNECT_DATA=(COMMAND=SHOW LOGFILE);VERSION (CONNECT_DATA=(COMMAND=version);STATUS (CONNECT_DATA=(COMMAND=STATUS);ESTABLISH (CONNECT_DATA=(SID=OBJ_SRVR)(CID=(PROGRAM=)(HOST=140.211.111.111)(USER=SOME_USER);ESTABLISH_REAL_DB (CONNECT_

7、DATA=(SID=wouprd)(CID=(PROGRAM=)(HOST=spruce.ous.edu)(USER=some_user);SERVICE_REGISTER (CONNECT_DATA=(COMMAND=service_register)(LOAD=0)(MAXLOAD=1)(INSTANCE_LOAD=0)(INSTANCE_MAXLOAD=0)(SHUTDOWN_NOTIFY=ON)(FLAGS=0)(SERVICE=obj_srvr)(INFO=PID$COLON$pid)(DISPLAY=PRESPAWNED SERVER)(SERVICE_ID=BBB99B99999

8、B-99BB-B999-B99BB9999B99)(CLASS=ORACLE)(VERSION=81500)(ADDRESS=(PROTOCOL=tcp)(HOST=spruce.ous.edu)(PORT=$port);REDIRECT (ADDRESS=(PROTOCOL=tcp)(HOST=140.211.116.176)(PORT=$port);如:数据库一般的连接,即 ESTABLISH 的连接字符串为:(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=topsec-syangjp)(PORT=1521)(CONNECT_DATA=(SID=test

9、)(SERVER=DEDICATED)(CID=(PROGRAM=D:oracleora92binsqlplusw.exe)(HOST=TOPSEC-MYANGJP)(USER=myangjp)2.3 接受包结构(0x02)用户重定向之后,需要用重定向端口向服务器发送连接,客户端发送连接包,服务器连接成功则返回接受包,否则返回 refuse 包struct TNS_ACCEPT_headerunsigned char NS_ver2;unsigned char ser_opt1;unsigned char ser_opt2;unsigned char SDU_size2;unsigned ch

10、ar TDU_size2;unsigned char Hardware_12;unsigned char data_length2;unsigned char Offset2;unsigned char flag0;unsigned char flag1;/unsigned char unknown8;/*no following data*/;2.4 拒绝包结构(0x04)typedef struct TNS_REFUSE_headerUCHAR uUserRefuseReason;UCHAR uSysRefuseReason;unsigned short int data_length;/

11、拒绝字符串TNS_REFUSE_HEADER;拒绝字符串:REFUTE (DESCRIPTION=(TMP=)(VSNNUM=153092352)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4)2.5 重定向包结构(0x05)typedef struct TNS_REDIRECT_headerUCHAR data_length2;UCHAR data; /长度为 data_length;/重定向数据TNS_REDIRECT_HEADER;重定向数据:REDIRECT (ADDRESS=(PROTOCOL=tcp)(HOST=140.211.

12、116.176)(PORT=$port);2.6 标记包结构(0x0c)typedef struct TNS_MARKER_headerUCHAR data_length3;TNS_REDIRECT_HEADER;注:当请求命令出错时,服务器会返回三个标记包2.7 控制包结构(0x0d)暂时没有发现该结构2.8 数据包结构(0x06)数据包负责传输数据库客户端和服务端的各种操作。每个操作由一个或几个命令组成,可以是在同一个数据包中有几个命令结构组合起来,也可以分开传输一些命令。Common Header 8 通用包头Data flag 2 状态Command packet 可变 数据Comma

13、nd packet 可变 数据 Command packet 可变 数据具体各种操作命令的组成和转换现在还不能完全确定,但是对于一些基本的 SQL 查询我们是可以分析的,下面我们主要分析一些命令结构和相关 ORACLE 操作的命令组成序列。有些有许多结构和它的具体字节不影响 ORACLE 基本命令的分析,所以只做了简单的分析,对于 SQL 的一般查询语句 TNS 协议主要通过数据包的 0x0303 和 0x035e 命令来传输数据,返回结果主要是通过 0x06 和 0x08 命令传输数据,0x06 主要传输数据,0x08 主要传输系统配置相关数据。2.8.1 数据包通用结构数据包有一个 2 字

14、节的状态包和多个命令包组成:Data flag 2 状态Command packet 可变 命令包 Command packet 可变 命令包注: Data_flag 一般情况为零,分析发现退出时为 0x0040Send token 0x0001Request Confirmation 0x0002Confirmation 0x0004Reserved 0x0008UNKNOWN 0x0010More Data to Come 0x0020End of File 0x0040Do Immediate Confirmation 0x0080Request to send 0x0100Reques

15、t Nt Trailer 0x0200命令包(Command packet)结构如下:Command 1 命令Sub command 1 子命令Data 可变 命令包数据注: 命令(Command)说明(以下命令为主命令的基本功能,但是还不能完全确认):0x01 Set Protocol0x02 Set Data Type Representation0x03 User to Oracle Request0x04 Return Status0x05 Access User Address Space0x06 Raw Transfer Header0x07 Raw Transfer Data0x

16、08 Return OPI(Oracle Program Interface) Parameter0x09 Oracle Function Complete0x0a N Error Return Definition0x0b Sending I/o Vector only for fast UPI(User Program Interface)0x0c Sending Long for Fast UPI0x0d Invoke User Callback0x0e Network Service0x0f Data Intergrity0x10 Supervisor0x110x12通过分析具体的包和

17、一些其他相关软件,得到以下相关命令和子命令,许多命令还需要进一步确认命令 子命令 类型 说明 使用0x01 0x05 请求 CLIENT TYPE0x01 0x06 Set Protocol0x01 0x2c IDENT0x02 0x00 RESET0x02 0x01 CHAR_MAP0x02 0x540x03 0x010x03 0x02 SQL_OPEN0x03 0x03 QUERY0x03 0x04 QUERY SECOND0x03 0x05 FETCH MORE0x03 0x080x03 0x09 DISCONNECT0x03 0x0E0x03 0x27 SET_LANG0x03 0x2

18、B DESC_COLS0x03 0x3B DB VERSION0x03 0x47 FETCH0x03 0x51 Set password0x03 0x52 Set user0x03 0x54 HANDSHAKE40x03 0x5E SQL0x03 0x73 AUTH20x03 0x76 AUTH10x03 0x77 查询表结构信息 DESC0x04 0x01 ACK0x04 0x02 ACK0x04 0x05 ACK0x06 0x00 More Row Result Info0x06 0x01 First Row Result Info0x08 0x010x08 0x050x08 0x080x

19、08 0x9c Db version0x10 0x19 Field Info SELEC 返回0x11 0x690x11 0x6b0x11 0x782.8.2 Data Format(length+data)对于 ORACLE 的 TNS 协议结构中数据传输,其主要采用以下方式,即用一个标志和长度字符来传输数据。具体格式如下 如果开始的大数据标志为 0xfe,则结构如下Big Data Identify 1Data Length 1 返回列数Data Data Length Data Length 1 如果Data Data LengthData Length 1 0 如果开始的大数据标志不为 0xfe,则结构如下:Data Length 1 返回列数Data Data Length2.8.2.1字符串格式(1) Char(n) ,ncharData 可变 实际数据Data1 可变 空格注:数据和数据 1 总长度为 n(2) Varchar(n)Data 可变(=n ) 实际数据

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 实用文档资料库 > 经济合同

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。