ORACLETNS协议分析完整.doc
《ORACLETNS协议分析完整.doc》由会员分享,可在线阅读,更多相关《ORACLETNS协议分析完整.doc(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、ORACLETNS协议分析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、他情况时可能使用其他类型。在分析过程中发现以下类型数据:l 查询语句出错会用标记(marker)类型l 客户端向服务器请求失败(如不存在的服务ID),服务器会发送拒绝(refuse)类型l 客户机登陆会发送连接类型,而服务器返回一个重定向类型数据l 当重定向端口连接完成后客户端重现发送连接类型数据,服务器返回接受类型数据,然后能够正常通讯。2 TNS数据格式TNS数据包含一个通用的包头,这个包头包含包校验,包长度和包类型等信息。不同的类型的数据实现不同功能的数据传输。Common Packet Header8通用包头Data可变数据2.1 通用包头格式每个TNS完整数据都包含一个通用包头,他说
3、明接受数据的长度及其相关校验和解析的信息。Length2包的长度,包括通用包头Packet check sum2包的校验和Type1TNS类型Flag1状态Header check sum2通用头的校验和注:Length:包长度(包括包头)Type: 数据包的类型类型号类型说明1连接(CONNECT)2接受(ACCEPT)3确认(ACK)4拒绝(REFUTE)5重定向(REDIRECT)6数据(DATA)7NULL89中止(ABORT)1011重新发送(RESEND)12标记(MARKER)13ATTENTION14控制(CONTROL)2.2 连接包结构(0x01)在客户端和ORACLE要建
4、立连接时,客户端首先发送一个连接结构,然后服务器返回重定向包(参见2.5)。typedef struct TNS_CONNECT_header UCHAR 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 Hardware_12; UCHAR data_length2; UCHAR Offset2; UCHA
5、R 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_CONNECT_HEADER;连接字符串格式:连接功能连接字符串PING(CONNECT_DAT
6、A=(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_DATA=(SID=wouprd)(CID=(PROGRAM=)(HOST=spruce.ous.
7、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=BBB99B99999B-99BB-B999-B99BB9999B99)(CLASS=ORACLE)(VERSION=81
8、500)(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)(SERVER=DEDICATED)(CID=(PROGRAM=D:oracleora92binsqlp
9、lusw.exe)(HOST=TOPSEC-MYANGJP)(USER=myangjp) )2.3 接受包结构(0x02)用户重定向之后,需要用重定向端口向服务器发送连接,客户端发送连接包,服务器连接成功则返回接受包,否则返回refuse包struct TNS_ACCEPT_header unsigned char NS_ver2; unsigned char ser_opt1; unsigned char ser_opt2; unsigned char SDU_size2; unsigned char TDU_size2; unsigned char Hardware_12; unsigne
10、d 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_header UCHAR uUserRefuseReason; UCHAR uSysRefuseReason; unsigned short int data_length;/拒绝字符串TNS_REFUSE_HEADER;拒绝字符串:REFUTE(DE
11、SCRIPTION= (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.116.176)(PORT=$port);2.6 标记包结构(0
12、x0c)typedef struct TNS_MARKER_headerUCHAR data_length3;TNS_REDIRECT_HEADER;注:当请求命令出错时,服务器会返回三个标记包2.7 控制包结构(0x0d)暂时没有发现该结构2.8 数据包结构(0x06)数据包负责传输数据库客户端和服务端的各种操作。每个操作由一个或几个命令组成,可以是在同一个数据包中有几个命令结构组合起来,也可以分开传输一些命令。Common Header8通用包头Data flag2状态Command packet可变数据Command packet可变数据Command packet可变数据具体各种操作命
13、令的组成和转换现在还不能完全确定,但是对于一些基本的SQL查询我们是可以分析的,下面我们主要分析一些命令结构和相关ORACLE操作的命令组成序列。有些有许多结构和它的具体字节不影响ORACLE基本命令的分析,所以只做了简单的分析,对于SQL的一般查询语句TNS协议主要通过数据包的0x0303和0x035e命令来传输数据,返回结果主要是通过0x06和0x08命令传输数据,0x06主要传输数据,0x08主要传输系统配置相关数据。2.8.1 数据包通用结构数据包有一个2字节的状态包和多个命令包组成:Data flag2状态Command packet可变命令包Command packet可变命令包注
14、:l Data_flag一般情况为零,分析发现退出时为0x0040Send token0x0001Request Confirmation0x0002Confirmation0x0004Reserved0x0008UNKNOWN0x0010More Data to Come0x0020End of File0x0040Do Immediate Confirmation0x0080Request to send0x0100Request Nt Trailer0x0200命令包(Command packet)结构如下:Command1命令Sub command1子命令Data可变命令包数据注: 命
15、令(Command)说明(以下命令为主命令的基本功能,但是还不能完全确认):0x01Set Protocol0x02Set Data Type Representation0x03User to Oracle Request0x04Return Status0x05Access User Address Space0x06Raw Transfer Header0x07Raw Transfer Data0x08Return OPI(Oracle Program Interface) Parameter0x09Oracle Function Complete0x0aN Error Return D
16、efinition0x0bSending I/o Vector only for fast UPI(User Program Interface)0x0cSending Long for Fast UPI0x0dInvoke User Callback0x0eNetwork Service0x0fData Intergrity0x10Supervisor0x110x12 通过分析具体的包和一些其他相关软件,得到以下相关命令和子命令,许多命令还需要进一步确认命令子命令类型说明使用0x010x05请求CLIENT TYPE0x010x06Set Protocol0x010x2cIDENT0x020
17、x00RESET0x020x01CHAR_MAP0x020x540x030x010x030x02SQL_OPEN0x030x03QUERY0x030x04QUERY SECOND0x030x05FETCH MORE0x030x080x030x09DISCONNECT0x030x0E0x030x27SET_LANG0x030x2BDESC_COLS0x030x3BDB VERSION0x030x47FETCH0x030x51Set password0x030x52Set user0x030x54HANDSHAKE40x030x5ESQL0x030x73AUTH20x030x76AUTH10x03
18、0x77查询表结构信息DESC0x040x01ACK0x040x02ACK0x040x05ACK0x060x00More Row Result Info0x060x01First Row Result Info0x080x010x080x050x080x080x080x9cDb version0x100x19Field InfoSELEC返回0x110x690x110x6b0x110x782.8.2 Data Format(length+data)对于ORACLE的TNS协议结构中数据传输,其主要采用以下方式,即用一个标志和长度字符来传输数据。具体格式如下l 如果开始的大数据标志为0xfe,则
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ORACLETNS 协议 分析 完整
限制150内