码迷,mamicode.com
首页 > 数据库 > 详细

oracle获取主机服务器IP

时间:2016-07-15 15:22:17      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:

--要获取服务器端的IP
14:45:34 SYS@XXX> select utl_inaddr.get_host_address from dual;

GET_HOST_ADDRESS
--------------------------------------------------
10.19.2.XX

--解析域名
14:45:32 SYS@XXX> SELECT UTL_INADDR.get_host_address(www.anysql.net) from dual;

UTL_INADDR.GET_HOST_ADDRESS(WWW.ANYSQL.NET)
--------------------------------------------------
173.236.176.151

--根据IP地址反向解析主机名
14:47:14 SYS@XXX> select utl_inaddr.get_host_name(173.236.176.151) from dual;

UTL_INADDR.GET_HOST_NAME(173.236.176.151)
--------------------------------------------------
apache2-argon.footprint.dreamhost.com

--获取客户端IP
14:48:48 SYS@XXX> select   SYS_CONTEXT(USERENV,IP_ADDRESS) ip_address from dual;

IP_ADDRESS
--------------------------------------------------
10.19.2.XX

--获取客户端主机名
14:48:50 SYS@XXX>  select sys_context(userenv,host) from dual;

SYS_CONTEXT(USERENV,HOST)
--------------------------------------------------
WORKGROUP\WXX-THINK
 

UTL_INADDR包获取ip等信息的实现原理:

可参考盖神的文章:http://www.eygle.com/archives/2006/10/how_to_getip_address.html

在Linux可使用strace 命令进行相关命令的跟踪,在跟踪信息中获知

Oracle顺序访问了如下文件来完成地址定位:

open("/etc/resolv.conf", O_RDONLY) = 12
open("/etc/host.conf", O_RDONLY) = 12
open("/etc/hosts", O_RDONLY) = 12

首先获取域名解析服务器,在根据host.conf文件确定解析顺序,因为缺省hosts文件优先,又继续读取/etc/hosts文件。

如果hosts文件存在解析关系,则返回信息;如果不存在,则继续问询DNS服务器,获得解析地址,如果不能解析,则会出错:

14:49:31 SYS@XXX> select UTL_INADDR.get_host_address(www.a.com) from dual;
select UTL_INADDR.get_host_address(www.a.com) from dual
       *1 行出现错误:
ORA-29257: 未知的主机 www.a.com
ORA-06512: 在 "SYS.UTL_INADDR", line 19
ORA-06512: 在 "SYS.UTL_INADDR", line 40
ORA-06512: 在 line 1

也就是说,UTL_INADDR的数据获取已经不依赖于数据库信息了,而SYS_CONTEXT的信息获取仍然来自数据库内部。

 

oracle获取主机服务器IP

标签:

原文地址:http://www.cnblogs.com/willspring/p/5673648.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!