该【ORACLETNS协议分析 】是由【泰山小桥流水】上传分享,文档一共【23】页,该文档可以免费在线阅读,需要了解更多关于【ORACLETNS协议分析 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。精选文档
精选文档
1
精选文档
ORACLE协议解析
1TNS介绍
TNS
协议是
ORACLE
服务端和客户端通信的协议。
TNS
协议传输可以使用
TCP/IP
精选文档
精选文档
23
精选文档
协议、使用
SSL
的
TCP/IP
协议、命名管道和
IPC
协议传输,此中
TCP/IP
协议传输是使
精选文档
精选文档
23
精选文档
用明文传递。这里我们只解析基于
TCP/IP
协议上的
TNS
数据。
精选文档
精选文档
23
精选文档
ORACLE
网络通信协议
TNS
有好多版本,而且大部分向下兼容,我们主要
oracle
精选文档
精选文档
23
精选文档
,他的协议版本号为
312,其兼容到
300。
精选文档
精选文档
23
精选文档
TNS协议有一个通用的头,通用头包含一个央求数据种类。不一样的服务央乞降数据传输使用不一样的央求数据种类。对于平时意义的盘问操作一般使用数据种类,当出现错
误或其余状况时可能使用其余种类。在解析过程中发现以下种类数据:
精选文档
精选文档
23
精选文档
盘问语句出错会用标记(
marker)种类
精选文档
精选文档
23
精选文档
客户端向服务器央求失败(如不存在的服务
ID),服务器会发送拒绝(
refuse)
精选文档
精选文档
23
精选文档
种类
精选文档
精选文档
23
精选文档
客户机登陆会发送连接种类,而服务器返回一个重定向种类数据
当重定向端口连接完成后客户端重现发送连接种类数据,服务器返回接受种类数据,而后可以正常通信。
TNS数据格式
TNS数据包含一个通用的包头,这个包头包含包校验,包长度和包种类等信息。
不一样的种类的数据实现不一样功能的数据传输。
精选文档
精选文档
23
精选文档
CommonPacketHeader
Data
8
可变
通用包头
数据
精选文档
精选文档
23
精选文档
每个TNS完好数据都包含一个通用包头,他说明接受数据的长度及其相关校验和解
析的信息。
Length
2
包的长度,包含通用包头
Packetchecksum
2
包的校验和
Type
1
TNS种类
精选文档
精选文档
23
精选文档
Flag
1
状态
Headerchecksum
2
通用头的校验和
注:
Length:包长度(包含包头)
Type:数据包的种类
种类号
种类说明
1
连接(CONNECT)
2
接受(ACCEPT)
3
确认(ACK)
4
拒绝(REFUTE)
5
重定向(REDIRECT)
6
数据(DATA)
7
NULL
8
9
中断(ABORT)
10
11
重新发送(RESEND)
12
标记(MARKER)
13
ATTENTION
14
控制(CONTROL)
(0x01)
在客户端和ORACLE要建立连接时,客户端第一发送一个连结构造,而后服务器返
回重定向包()。
typedefstructTNS_CONNECT_header{
UCHARNS_ver[2];
UCHARCompatible_ver[2];
UCHARser_opt1;
UCHARser_opt2;
UCHARSDU_size[2];
UCHARTDU_size[2];
UCHARNT_protocol_ch1;
UCHARNT_protocol_ch2;
UCHARMax_packets[2];
精选文档
精选文档
14
精选文档
UCHARHardware_1[2];
UCHARdata_length[2];
UCHAROffset[2];
UCHARMax_data[4];
UCHARflag0;
UCHARflag1;
/*javathininterfacehasnoitemsandid,
ifitisnotjdbcthin,useoffsettooverridethese
有些版本TNS协议中没有下边几项*/
UCHARitem1[4];
UCHARitem2[4];
UCHARID[8];
UCHARunknown[8];
/*followedbydecode_des_conn_data*/
//连接字符串
}TNS_CONNECT_HEADER;
连接字符串格式:
精选文档
精选文档
15
精选文档
连接功能
连接字符串
精选文档
精选文档
23
精选文档
PING
SHOW
VERSION
STATUS
ESTABLISH
ESTABLISH_REAL_DB
SERVICE_REGISTER
(CONNECT_DATA=(COMMAND=ping));
(CONNECT_DATA=(COMMAND=SHOWLOGFILE));
(CONNECT_DATA=(COMMAND=version));
(CONNECT_DATA=(COMMAND=STATUS));
(CONNECT_DATA=(SID=OBJ_SRVR)
(CID=(PROGRAM=)(HOST=)
(USER=SOME_USER)));
(CONNECT_DATA=(SID=wouprd)
(CID=(PROGRAM=)(HOST=)
(USER=some_user)));
(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=PRESPAWNEDSERVER)
(SERVICE_ID=BBB99B99999B-99BB-B999-B99BB9999B99)
精选文档
精选文档
23
精选文档
(CLASS=ORACLE)(VERSION=81500)
(ADDRESS=(PROTOCOL=tcp)
(HOST=)(PORT=$port)));
REDIRECT(ADDRESS=(PROTOCOL=tcp)
(HOST=)(PORT=$port));
如:
数据库一般的连接,即ESTABLISH的连接字符串为:
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=topsec-syangjp)
(PORT=1521)
)
(CONNECT_DATA=
(SID=test)
(SERVER=DEDICATED)
(CID=
(PROGRAM=D:\oracle\ora92\bin\)
(HOST=TOPSEC-MYANGJP)
(USER=myangjp)
)
)
)
精选文档
精选文档
18
精选文档
(0x02)
用户重定向以后,需要用重定向端口向服务器发送连接,客户端发送连接包,服务
器连接成功则返回接受包,不然返回refuse包
structTNS_ACCEPT_header{
unsignedcharNS_ver[2];
unsignedcharser_opt1;
unsignedcharser_opt2;
unsignedcharSDU_size[2];
unsignedcharTDU_size[2];
unsignedcharHardware_1[2];
unsignedchardata_length[2];
unsignedcharOffset[2];
unsignedcharflag0;
unsignedcharflag1;
//unsignedcharunknown[8];
/*nofollowingdata*/
精选文档
精选文档
19
精选文档
};
(0x04)
typedefstructTNS_REFUSE_header{
UCHARuUserRefuseReason;
UCHARuSysRefuseReason;
unsignedshortintdata_length;
//拒绝字符串
}TNS_REFUSE_HEADER;
拒绝字符串:
REFUTE(DESCRIPTION=
(TMP=)
(VSNNUM=153092352)
(ERR=12505)
(ERROR_STACK=
(ERROR=
(CODE=12505)
(EMFI=4)
)
))
(0x05)
typedefstructTNS_REDIRECT_header{
UCHARdata_length[2];
UCHARdata;//长度为data_length;
重定向数据
}TNS_REDIRECT_HEADER;
重定向数据:
REDIRECT(ADDRESS=(PROTOCOL=tcp)
(HOST=)(PORT=$port));
精选文档
精选文档
20
精选文档
(0x0c)
typedefstructTNS_MARKER_header{
UCHARdata_length[3];
}TNS_REDIRECT_HEADER;
注:
当求命令出,服器会返回三个包
(0x0d)
没有构
(0x06)
数据包数据客端和服端的各种操作。每个操作由一个或几个命令成,可以是在同一个数据包中有几个命令构合起来,也可以分开一些命令。
CommonHeader
8
通用包
Dataflag
2
状
Commandpacket
可
数据
Commandpacket
可
数据
⋯
⋯
⋯
Commandpacket
可
数据
精选文档
精选文档
21
精选文档
详尽各种操作命令的成和在不可以完好确立,
我是可以解析的,下边我主要解析一些命令构和相关
但是于一些基本的SQL
ORACLE操作的命令成
精选文档
精选文档
23
精选文档
序列。
精选文档
精选文档
23
精选文档
有些有多构和它的详尽字不影响
的解析,于SQL的一般句TNS
ORACLE基本命令的解析,因此只做了
主要通数据包的0x0303和0x035e命令
精选文档
精选文档
23
精选文档
来数据,返回果主若是通
0x06
和
0x08
命令数据,
0x06
主要数据,
0x08
精选文档
精选文档
23
精选文档
主要系配置相关数据。
精选文档
精选文档
23
精选文档
数据包有一个2字的状包和多个命令包成:
Dataflag2状
精选文档
精选文档
23
精选文档
Commandpacket
可
命令包
⋯
⋯
⋯
Commandpacket
可
命令包
注:
Data_flag一般状况零,解析退出
0x0040
Sendtoken
0x0001
RequestConfirmation
0x0002
Confirmation
0x0004
Reserved
0x0008
UNKNOWN
0x0010
MoreDatatoCome
0x0020
EndofFile
0x0040
DoImmediateConfirmation
0x0080
Requesttosend
0x0100
RequestNtTrailer
0x0200
命令包(Commandpacket)构以下:
Command
1
命令
Subcommand
1
子命令
Data
可
命令包数据
注:
命令(Command)明(以下命令主命令的基本功能,但是不可以完好确)
:
0x01
SetProtocol
0x02
SetDataTypeRepresentation
0x03
UsertoOracleRequest
0x04
ReturnStatus
0x05
AccessUserAddressSpace
0x06
RawTransferHeader
0x07
RawTransferData
0x08
ReturnOPI(OracleProgramInterface)Parameter
0x09
OracleFunctionComplete
0x0a
NErrorReturnDefinition
0x0b
SendingI/oVectoronlyforfastUPI(UserProgramInterface)
0x0c
SendingLongforFastUPI
0x0d
InvokeUserCallback
0x0e
NetworkService
0x0f
DataIntergrity
精选文档
精选文档
28
精选文档
0x10Supervisor
0x11
0x12
经过解析详尽的包和一些其余相关软件,获取以下相关命令和子命令,好多命令还需要进一步确认
命令
子命令
种类
说明
使用
0x01
0x05
央求
CLIENTTYPE
0x01
0x06
SetProtocol
0x01
0x2c
IDENT
0x02
0x00
RESET
0x02
0x01
CHAR_MAP
0x02
0x54
0x03
0x01
0x03
0x02
SQL_OPEN
0x03
0x03
QUERY
0x03
0x04
QUERYSECOND
0x03
0x05
FETCHMORE
0x03
0x08
0x03
0x09
DISCONNECT
0x03
0x0E
0x03
0x27
SET_LANG
0x03
0x2B
DESC_COLS
0x03
0x3B
DBVERSION
0x03
0x47
FETCH
0x03
0x51
Setpassword
0x03
0x52
Setuser
0x03
0x54
HANDSHAKE4
0x03
0x5E
SQL
0x03
0x73
AUTH2
0x03
0x76
AUTH1
0x03
0x77
盘问表结构信息
DESC
0x04
0x01
ACK
0x04
0x02
ACK
0x04
0x05
ACK
0x06
0x00
MoreRowResultInfo
0x06
0x01
FirstRowResultInfo
0x08
0x01
精选文档
精选文档
29
精选文档
0x08
0x05
0x08
0x08
0x08
0x9c
Dbversion
0x10
0x19
FieldInfo
SELEC返回
0x11
0x69
0x11
0x6b
0x11
0x78
(length+data)
于ORACLE的TNS构中数据,其主要采纳以下方式,即用一个志
和度字符来数据。详尽格式以下
假如开始的大数据志
0xfe,构以下
BigDataIdentify
1
Data
Length
1
返回列数
Data
Data
Length
⋯
⋯
⋯
Data
Length
1
假如
Data
Data
Length
Data
Length
1
0
假如开始的大数据志不
0xfe,构以下:
Data
Length
1
返回列数
Data
Data
Length
Char(n),nchar
精选文档
精选文档
30
精选文档
Data
Data1
可
可
数据
空格
精选文档
精选文档
23
精选文档
注:数据和数据
1度
n
精选文档
精选文档
23
精选文档
Varchar(n)
Data可(<=n)数据
精选文档
精选文档
23
精选文档
ORACLETNS协议分析 来自淘豆网m.daumloan.com转载请标明出处.