• 用UTL_INADDR包获取曾经衔接用户的IP地址




     前导发轫:赛迪网    作者:Alizze

    许多人都晓得,经由议定SYS_CONTEXT函数可以失失局部信息,以后用户的ip等信息则可以经由议定上面的敕令来举行获取:

    SQL> select sys_context('userenv','host') from dual; 
    SYS_CONTEXT('USERENV','HOST')
    ---------------------------------------------------
    WORKGROUP\GQGAI
    SQL> select sys_context('userenv','ip_address') from dual;
    SYS_CONTEXT('USERENV','IP_ADDR
    ---------------------------------------------------
    172.16.34.20

    假定你须要获取其余session的地址等信息,SYS_CONTEXT函数则只能经由议定LOGON触发器来完成。

    在没有触发器记录的前提下,你可以经由议定UTL_INADDR Package来完成。

    上面具体引见一下UTL_INADDR包获取ip等信息的事项原理。

    起首,在数据库中举行上面的查询:

    [oracle@jumper oracle]$ sqlplus "/ as sysdba"
    SQL*Plus: Release 9.2.0.4.0 - Production on Wed Oct 25 11:24:22 2006
    Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
    Connected to:
    Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
    With the Partitioning option
    JServer Release 9.2.0.4.0 - Production
    SQL> !
    [oracle@jumper oracle]$ ps -ef|grep sql
    oracle 14700 14663 1 11:24 pts/0 00:00:00 sqlplus 
    oracle 14732 14702 0 11:24 pts/0 00:00:00 grep sql
    [oracle@jumper oracle]$ ps -ef|grep LO
    oracle 14701 14700 0 11:24 ? 00:00:00 oracleeygle 
    (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
    oracle 14734 14702 0 11:24 pts/0 00:00:00 grep LO
    [oracle@jumper oracle]$ exit
    exit
    SQL> SELECT UTL_INADDR.get_host_address('www.anysql.net') from dual;
    UTL_INADDR.GET_HOST_ADDRESS('WWW.ANYSQL.NET')
    ---------------------------------------------------------
    208.113.151.109

    Linux体系中,你可以经由议定strace跟踪此历程,失失上面的客栈酒店信息:

    [oracle@jumper oracle]$ strace -p 14701
    Process 14701 attached - interrupt to quit
    read(7, "\0\313\0\0\6\0\0\0\0\0\3^
    \10a\200\0\0\0\0\0\0@\342\22\10"..., 2064) = 203
    gettimeofday({1161746697, 269895}, NULL) = 0
    getrusage(RUSAGE_SELF, {ru_utime={0, 30000}, 
    ru_stime={0, 10000}, ...}) = 0
    getrusage(RUSAGE_SELF, {ru_utime={0, 40000}, 
    ru_stime={0, 10000}, ...}) = 0
    gettimeofday({1161746697, 270542}, NULL) = 0
    gettimeofday({1161746697, 270670}, NULL) = 0
    getrusage(RUSAGE_SELF, {ru_utime={0, 40000}, 
    ru_stime={0, 10000}, ...}) = 0
    getrusage(RUSAGE_SELF, {ru_utime={0, 40000}, 
    ru_stime={0, 10000}, ...}) = 0
    gettimeofday({1161746697, 271614}, NULL) = 0
    gettimeofday({1161746697, 271748}, NULL) = 0
    getrusage(RUSAGE_SELF, {ru_utime={0, 40000}, 
    ru_stime={0, 10000}, ...}) = 0
    getrusage(RUSAGE_SELF, {ru_utime={0, 40000}, 
    ru_stime={0, 10000}, ...}) = 0
    gettimeofday({1161746697, 272347}, NULL) = 0
    gettimeofday({1161746697, 272699}, NULL) = 0
    getrusage(RUSAGE_SELF, {ru_utime={0, 40000}, 
    ru_stime={0, 10000}, ...}) = 0
    gettimeofday({1161746697, 272989}, NULL) = 0
    gettimeofday({1161746697, 273140}, NULL) = 0
    gettimeofday({1161746697, 273273}, NULL) = 0
    getrusage(RUSAGE_SELF, {ru_utime={0, 40000}, 
    ru_stime={0, 10000}, ...}) = 0
    gettimeofday({1161746697, 273771}, NULL) = 0
    gettimeofday({1161746697, 275526}, NULL) = 0
    getpid() = 14701
    open("/etc/resolv.conf", O_RDONLY) = 12
    fstat64(12, {st_mode=S_IFREG|0644, st_size=46, ...}) = 0
    mmap2(NULL, 4096, PROT_READ|PROT_WRITE, 
    MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6fba000
    read(12, "search hurray.com.cn\nnameserver "..., 4096) = 46
    read(12, "", 4096) = 0
    close(12) = 0
    munmap(0xb6fba000, 4096) = 0
    socket(PF_UNIX, SOCK_STREAM, 0) = 12
    connect(12, {sa_family=AF_UNIX, 
    path="/var/run/.nscd_socket"}, 
    110) = -1 ENOENT (No such file or directory)
    close(12) = 0
    open("/etc/host.conf", O_RDONLY) = 12
    fstat64(12, {st_mode=S_IFREG|0644, st_size=17, ...}) = 0
    mmap2(NULL, 4096, PROT_READ|PROT_WRITE, 
    MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6fba000
    read(12, "order hosts,bind\n", 4096) = 17
    read(12, "", 4096) = 0
    close(12) = 0
    munmap(0xb6fba000, 4096) = 0
    futex(0xb71a1a20, FUTEX_WAKE, 2147483647) = 0
    open("/etc/hosts", O_RDONLY) = 12
    fcntl64(12, F_GETFD) = 0
    fcntl64(12, F_SETFD, FD_CLOEXEC) = 0
    fstat64(12, {st_mode=S_IFREG|0644, st_size=175, ...}) = 0
    mmap2(NULL, 4096, 
    PROT_READ|PROT_WRITE, 
    MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6fba000
    read(12, "# Do not remove the following li"..., 4096) = 175
    read(12, "", 4096) = 0
    close(12) = 0
    munmap(0xb6fba000, 4096) = 0
    open("/opt/oracle/product/9.2.0/lib/libnss_dns.so.2", 
    O_RDONLY) = -1 ENOENT (No such file or directory)
    open("/lib/tls/libnss_dns.so.2", 
    O_RDONLY) = -1 ENOENT (No such file or directory)
    open("/lib/i686/libnss_dns.so.2", 
    O_RDONLY) = -1 ENOENT (No such file or directory)
    open("/lib/libnss_dns.so.2", O_RDONLY) = 12
    read(12, "\177ELF\1\1\1\0\0\0\0\0\0\0\0
    \0\3\0\3\0\1\0\0\0\240\16"..., 512) = 512
    fstat64(12, {st_mode=S_IFREG|0755, st_size=18632, ...}) = 0
    old_mmap(NULL, 17100, PROT_READ
    |PROT_EXEC, MAP_PRIVATE, 12, 0) = 0xb6fb6000
    old_mmap(0xb6fba000, 4096, PROT_READ|PROT_WRITE, 
    MAP_PRIVATE|MAP_FIXED, 12, 0x3000) = 0xb6fba000
    close(12) = 0
    open("/opt/oracle/product/9.2.0/lib/libresolv.so.2", 
    O_RDONLY) = -1 ENOENT (No such file or directory)
    open("/lib/tls/libresolv.so.2", 
    O_RDONLY) = -1 ENOENT (No such file or directory)
    open("/lib/i686/libresolv.so.2", 
    O_RDONLY) = -1 ENOENT (No such file or directory)
    open("/lib/libresolv.so.2", O_RDONLY) = 12
    read(12, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\320
    (\0"..., 512) = 512
    fstat64(12, {st_mode=S_IFREG|0755, st_size=76508, ...}) = 0
    old_mmap(NULL, 73604, 
    PROT_READ|PROT_EXEC, MAP_PRIVATE, 12, 0) = 0xb6fa4000
    old_mmap(0xb6fb3000, 4096, PROT_READ|PROT_WRITE, 
    MAP_PRIVATE|MAP_FIXED, 12, 0xf000) = 0xb6fb3000
    old_mmap(0xb6fb4000, 8068, PROT_READ|PROT_WRITE, 
    MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb6fb4000
    close(12) = 0
    socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 12
    connect(12, {sa_family=AF_INET, sin_port=htons(53), 
    sin_addr=inet_addr("208.113.151.109")}, 28) = 0
    send(12, "\324#\1\0\0\1\0\0\0\0\0\0\3www
    \5anysql\3com\0\0\1\0\1", 31, 0) = 31
    gettimeofday({1161746697, 286025}, NULL) = 0
    poll([{fd=12, events=POLLIN, revents=POLLIN}], 1, 5000) = 1
    ioctl(12, FIONREAD, [74]) = 0
    recvfrom(12, "\324#\
    201\200\0\1\0\1\0\1\0\0\3www\5anysql\3com\0\0\1\0"..., 1024, 0, 
    {sa_family=AF_INET, sin_port=htons(53), 
    sin_addr=inet_addr("208.113.151.109")}, [16]) = 74
    close(12) = 0
    gettimeofday({1161746697, 290245}, NULL) = 0
    getrusage(RUSAGE_SELF, 
    {ru_utime={0, 40000}, ru_stime={0, 20000}, ...}) = 0
    getrusage(RUSAGE_SELF, 
    {ru_utime={0, 40000}, ru_stime={0, 20000}, ...}) = 0
    gettimeofday({1161746697, 291553}, NULL) = 0
    write(10, "\2\275\0\0\6\0\0\0\0\0\20\31\266\344\217\
    3700\320\341S"..., 701) = 701
    read(7, "\0\215\0\0\6\0\0\0\0\0\3^\t@\0\0\0\1\0\0\0
    \0\0\0\0\0\0"..., 2064) = 141
    gettimeofday({1161746697, 294898}, NULL) = 0
    getrusage(RUSAGE_SELF, {ru_utime={0, 40000}, 
    ru_stime={0, 20000}, ...}) = 0
    getrusage(RUSAGE_SELF, {ru_utime={0, 40000}, 
    ru_stime={0, 20000}, ...}) = 0
    gettimeofday({1161746697, 295496}, NULL) = 0
    getrusage(RUSAGE_SELF, {ru_utime={0, 40000}, 
    ru_stime={0, 20000}, ...}) = 0
    gettimeofday({1161746697, 295847}, NULL) = 0
    gettimeofday({1161746697, 295981}, NULL) = 0
    lseek(9, 1024, SEEK_SET) = 1024
    read(9, "\30\0$\0007\0@\0J\0V\0`\0i\0t\0~\0\
    232\0\245\0\320\0\330"..., 512) = 512
    lseek(9, 47104, SEEK_SET) = 47104
    read(9, "\f\0^\5\0\0P\0x\5\0\0\214\0y\5\0\0\
    250\0z\5\0\0\313\0{"..., 512) = 512
    gettimeofday({1161746697, 297024}, NULL) = 0
    write(10, "\0\202\0\0\6\0\0\0\0\0\4\1\0\0\0\1\
    1\0\0\0{\5\0\0\0\0\1"..., 130) = 130
    read(7, 
    Process 14701 detached

    在此信息中,你可以创造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效劳器,失失分解地址,假如不克不及分解,则会泛起错误:

    SQL> select UTL_INADDR.get_host_address('www.a.com') from dual;
    select UTL_INADDR.get_host_address('www.a.com') from dual
    *
    ERROR at line 1:
    ORA-29257: host www.a.com unknown
    ORA-06512: at "SYS.UTL_INADDR", line 35
    ORA-06512: at "SYS.UTL_INADDR", line 40
    ORA-06512: at line 1

    综上所述,年夜师可以创造UTL_INADDR的数据获取曾经不再依赖数据库信息,而SYS_CONTEXT的信息获取依然来自数据库的内部。




    版权声明: 原创作品,承诺转载,转载时请务必以超链接方式标明文章 原始缘故原由 、作者信息和本声明。不然将清查法则责任。

  • 相关阅读:
    题目分享M
    题目分享L
    题目分享J
    题目分享I
    FarmCraft
    C++语言中一些可能会用到的函数及头文件
    最小生成树(Kruskal & Prim & Boruvka)
    线段树板子(懒惰标记)
    FarmCraft——树形DP+贪心
    tarjan算法板子
  • 原文地址:https://www.cnblogs.com/zgqjymx/p/1974033.html
Copyright © 2020-2023  润新知