Oracle中獲取主機(jī)名和IP地址

利用sys_context函數(shù)我們可以獲得當(dāng)前session的hostname和ip address
SQL> select?sys_context('userenv','host') from dual;
SYS_CONTEXT('USERENV','HOST')
如果還想獲取IP地址的歸屬地和應(yīng)用場(chǎng)景,可以免費(fèi)試試IP數(shù)據(jù)云可精確到街道https://www.ipdatacloud.com/?utm-source=LJ&utm-keyword=?1088

WORKGROUP\IBM-L3YMBNP
SQL> select sys_context('userenv','ip_address') from dual;
SYS_CONTEXT('USERENV','IP_ADDRESS')
-----------------------------------------------------------
127.0.0.1
通過(guò)sys_context我們只能獲得當(dāng)前session的信息,如果要獲得其他session呢?
這個(gè)時(shí)候我們就用utl_inaddr包來(lái)獲取
SQL> select?utl_inaddr.get_host_address('IBM-L3YMBNP') from dual;
UTL_INADDR.GET_HOST_ADDRESS('IBM-L3YMBNP')
-------------------------------------------------------------------
9.181.142.152
而且我們還可以獲得sina以及其他web site的ip
SQL> select utl_inaddr.get_host_address('') from dual;
UTL_INADDR.GET_HOST_ADDRESS('')
---------------------------------------------------------------------
218.30.108.55
其原理是:首先獲取域名解析服務(wù)器(resolv.conf),在根據(jù)host.conf文件確定解析順序,因?yàn)槿笔〉氖莌osts文件優(yōu)先解析,這個(gè)時(shí)候會(huì)又繼續(xù)讀取/etc/hosts文件。
如果hosts文件存在解析關(guān)系,則返回信息;如果不存在,則繼續(xù)問(wèn)詢DNS服務(wù)器,獲得解析地址,如果不能解析,則會(huì)出錯(cuò)
SQL> select utl_inaddr.get_host_address('') from dual;
select utl_inaddr.get_host_address('') from dual
??????*
ERROR 位于第 1 行:
ORA-29257: 未知的主機(jī)
ORA-06512: 在"SYS.UTL_INADDR", line 35
ORA-06512: 在"SYS.UTL_INADDR", line 40
ORA-06512: 在line 1
基本上就是這樣了。