Meterlink参考文档:

How to Track IP Address of the Form Session in Oracle application 11i (文档 ID 878931.1) 我用的EBS版本是:R12.1.3 

一、 确认是否有启用OAM服务管理器: 

备注:其实是否有启用OAM服务管理器对利用Form监控EBS客户端的IP地址是完全没关的。

这里放在前面,主要是要利用OAM其中一个Form监控功能,它会自动读取Form对应的进程的(有IP地址信息的)rti文件,并自动将IP地址记录在一个表格里面。方便我们完全不用客制开发的前提下做查询IP地址。下面会有详述。 不多说,开始配置。

查询管理器:OAM Generic Collection Service: <Node> 如果它的状态是无效的,则要启用这个管理器。

二、 接着到Form监控工作台查询对应的IP地址。 过几分钟之后,Form的监控信息就有了 (必须要先启用Form监控。在User_Profile_Option_Name = 登录:审计层(Sign-On:Audit Level)有设定,设为“表单”)。

三、通过表单监控,取得客户端IP

1、打开FORM的定义功能界面,测试本机客户端IP所操作的FORM表单

2、打开职责 系统管理 > Oracle Applications 管理器 > 表单监控

三、 对应的后台查询的SQL,根据登录ID可以查找到用户登录的所有的Form的信息,包括IP地址等等。

/* Formatted on 2018/3/14 22:18:06 (QP5 v5.256.13226.35538) */
SELECT L.LOGIN_ID
     , L.USER_ID
     , L.START_TIME LOGIN_TIME
     , NVL (F.START_TIME, NVL (R.START_TIME, L.START_TIME)) FORM_TIME
     , USR.USER_NAME
     , RSP.RESPONSIBILITY_NAME
     , FRM.USER_FORM_NAME
     , (SELECT IPADDRESS
          FROM FND_OAM_FORMS_RTI OFRI
         WHERE 1 = 1
           AND (TO_CHAR (OFRI.PID) = NVL (SF.PROCESS, SR.PROCESS)
             OR NVL (SF.PROCESS, SR.PROCESS) = CONCAT (CONCAT (TO_CHAR (OFRI.PID), ':'), TO_CHAR (OFRI.THREADID)))
           AND ROWNUM <= 1)
          IPADDRESS
     , R.RESP_APPL_ID
     , R.RESPONSIBILITY_ID
     , F.FORM_ID
     , F.FORM_APPL_ID
     , L.PID
     , L.PROCESS_SPID
     , DECODE (NVL (SF.SID, -999), -999, 'RESP_LEVEL', 'FORM_LEVEL') SESSION_LEVEL
     , NVL (F.AUDSID, R.AUDSID) AUDSID
     , NVL (SF.SID, SR.SID) SID
     , NVL (SF.SERIAL#, SR.SERIAL#) SERIAL#
     , NVL (SF.PROCESS, SR.PROCESS) PROCESS
  FROM FND_RESPONSIBILITY_TL RSP
     , FND_FORM_TL FRM
     , FND_USER USR
     , FND_LOGINS L
     , FND_LOGIN_RESP_FORMS F
     , GV$SESSION SF
     , FND_LOGIN_RESPONSIBILITIES R
     , GV$SESSION SR
WHERE 1 = 1
   AND L.LOGIN_ID = R.LOGIN_ID(+)
   AND R.LOGIN_ID = F.LOGIN_ID(+)
   AND R.LOGIN_RESP_ID = F.LOGIN_RESP_ID(+)
   AND L.LOGIN_TYPE = 'FORM'
   AND L.USER_ID = USR.USER_ID
   AND R.RESPONSIBILITY_ID = RSP.RESPONSIBILITY_ID(+)
   AND R.RESP_APPL_ID = RSP.APPLICATION_ID(+)
   AND RSP.LANGUAGE(+) = USERENV ('LANG')
   AND F.FORM_ID = FRM.FORM_ID(+)
   AND F.FORM_APPL_ID = FRM.APPLICATION_ID(+)
   AND FRM.LANGUAGE(+) = USERENV ('LANG')
   AND F.AUDSID = SF.AUDSID(+)
   AND R.AUDSID = SR.AUDSID(+)                                                                                                                     ---
   AND L.LOGIN_ID =  :P_LOGIN_ID

四、 原理探索: 

问题:表格FND_LOGIN_RESP_FORMS如何获取IP地址的?

查找了很多文档,原来,它是读取Oracle Form服务自动产生的一个rti文件来获取对应的客户端的IP地址。

http://etrm.oracle.com/pls/et1211d9/etrm_pnav.show_object?c_name=FND_OAM_FORMS_RTI&c_owner=APPLSYS&c_type=TABLE

那rti文件在哪里?

1. 先要确定EBS的环境变量的配置文件。 登录FTP,然后: 进入: $APPL_TOP

在这个目录下面,找到对应的服务器的EBS环境配置文件。这个文件是自动命名的。命名规则:APPS<SID>_Hostname 如果有多个,可以:cd $INST_TOP。再pwd就会发现对应服务器环境的变量配置文件名称。

[root@ebs12vis ~]# su - applmgr

[applmgr@ebs12vis ~]$

[applmgr@ebs12vis appl]$ cd $APPL_TOP

[applmgr@ebs12vis appl]$ pwd

/d01/applmgr/VIS/apps/apps_st/appl

2. 找到下面的Form的配置(FORMS_RESTRICT_ENTER_QUERY): 

这里反过来说明一个问题,就是,如果表格FND_LOGIN_RESP_FORMS没有IP地址,也是因为这里没配置好的原因。

3. 根据配置,可以知道rti文件的目录 

这个环境的配置的目录是:

FORMS_RTI_DIR="/d01/applmgr/VIS/inst/apps/VIS_ebs12vis/logs/ora/10.1.2/forms"

也可以用cd $FORMS_TRACE_DIR直接找到rti文件的目录。 

上面用环境变量的路径进去主要目的是为了确认服务器的配置究竟对不对。 这个em后面的数据对应的进程的PROCESS栏位。就是:V$SESSION.process 例如我操作的Form画面的进程ID是:27285。 根据它就可以找到我的IP地址:

这里你可能会想问:那Form是如何获取IP地址,生成rti文件的呢?

这个我也想知道。我猜测应该是Form在运行的时候,其中的有一个功能(应该是Java程序)会获取客户端的IP地址,并自动生成rti文件。

五、 必须要注意的问题 备注: 

This ways only users who have logged in to applications and are using any forms based application then only you are able to track backwards to their relevant IP Address. 

换句话说,如果要用这个办法,确定客户端的IP地址,必须有2个前提:

1 用户必须要登录Form的画面,哪怕是只登录到职责也行(其实职责画面也是一个Form)。假设用户只是用网页来操作数据,那目前没办法监控到客户的IP地址。 

2 如果用OAM管理对应的表格来做监控,那登录Form画面的时间最好超过5分钟以上,系统才可以跟踪到对应的客户端的IP地址。 

六、 后续的开发(监控用户登录对应IP地址的客制开发) 这里有一个需求,想要知道用户每次登录的IP地址。 办法1:监控表格FND_OAM_FORMS_RTI 

先建立一个触发器,监控表格FND_OAM_FORMS_RTI。当有新记录塞入的时候,就会自动将对应的信息和用户登录的信息碰。如果有存在登录ID,则将IP地址和登录ID关联起来,存在一个客制的表格里面。就可以达到关联登录用户信息和IP地址的信息的目的。

方法2:直接在服务器读取Form产生的rti文件,实现记录用户登录的IP地址。

办法1上线之后,觉得并不好用,因为很多用户实际上是登录一下系统,就立马退出的。换句话说,5分钟之内的操作,那对应的IP地址很可能没办法监控到。对于这种情况,我觉得还是直接用代码读取Form产生的rti文件比较好。 根据这个思路,只要用户有点击打开Form画面(就是打开职责),可以自动记录其IP地址! 

然后用触发器监控登录职责的表格:

用上这个办法之后,基本上新登录的记录都会记录其IP地址。

但是还是有一些登录没记录到IP地址的登录信息,除开他真的没点开Form之外,还有一个可能性,就是属于那种呆滞一段时间后重新登录的部分。这部分就记录不了。

因为重新登录之后,虽然新增加了一行登录的记录,但是用到的Form功能对应的登录的ID还是旧的登录ID。

七、 相关的Meterlink文档: 

How To Find The IP Address Of The Client Machine From Where A Particular Forms User Is Connected ? [ID 879092.1] 

How to Count Total Number of Users Connected to ORACLE Application [ID 295206.1] How to Track IP Address of the Form Session in Oracle application 11i [ID 878931.1] 

How to Kill Inactive Sessions Based on the Information in the Monitor User Form [ID 103516.1] 11i: How To Identify the User for a Forms Session [ID 185762.1]

跟踪EBS客户端的IP地址的更多相关文章

  1. Java获取客户端真实IP地址的两种方法

    在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...

  2. 获取客户端登录ip地址

    request方法客户端IP: request.getRemoteAddr()  输出:192.168.0.106 客户端主机名:request.getRemoteHost()输出:abc 在JSP里 ...

  3. java nginx等代理或网关转发请求后获取客户端的ip地址,原理

    在没有网关或者反向代理软件情况下,java里获取客户端ip地址的方法是request.getRemoteAddr() 先解释下http协议和TCP协议: 网页默认是进行http连接了,http协议即超 ...

  4. 伪造IP及获取客户端真实IP地址

    Fiddler支持自定义规则,可以实现对HTTP请求数据发送给Server前或HTTP应答数据发送给浏览器前进行修改.下面的例子将演示如何向所有HTTP请求数据中增加一个头.1)打开Fiddler,点 ...

  5. (转)asp.net中获得客户端的IP地址

    因为要在项目中取到客户端IP,在网上搜了下相关资料,其中有一篇文章总结的比较详细,这里就把一些我用的上总结一下 方便以后查阅. 通常我们都通过下面的代码获得IP:   string ip =Syste ...

  6. --with-http_realip_module选项(后台Nginx服务器记录原始客户端的IP地址 )

    转自:http://blog.itpub.net/27043155/viewspace-734234/ 通过这个模块允许我们改变客户端请求头中客户端IP地址值(例如,X-Real-IP 或 X-For ...

  7. 【知识积累】服务器端获取客户端的IP地址(当客户端调用由Axis开发的WebService)

    一.前言 由于项目中一个小的模块需要获取客户端的IP地址以保证安全调用webservice接口,项目中客户端使用C#编写,服务器端使用Java编写,服务器端与客户端采用Axis开发的WebServic ...

  8. 使用SEP禁止客户端修改IP地址 - 飞舞的菜刀 - 51CTO技术博客

    1.首先从注册表中搜寻 IP地址所在的位置,查到几项,此项即可: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Paramete ...

  9. asp.net中获得客户端的IP地址

    asp.net中获得客户端的IP地址 因为要在项目中取到客户端IP,在网上搜了下相关资料,其中有一篇文章总结的比较详细,这里就把一些我用的上总结一下 方便以后查阅.  通常我们都通过下面的代码获得IP ...

随机推荐

  1. python基础-pthon

    1)python 由Guido开发 2)编译(compile)型:通过编译器把代码直接生成一个可执行文件. 比如把英语书一次性翻译成中文书.语言有:c,C++等 解释型:边编译边执行.语言如:java ...

  2. Android仿苹果版QQ下拉刷新实现(二) ——贝塞尔曲线开发"鼻涕"下拉粘连效果

    前言 接着上一期Android仿苹果版QQ下拉刷新实现(一) ——打造简单平滑的通用下拉刷新控件 的博客开始,同样,在开始前我们先来看一下目标效果: 下面上一下本章需要实现的效果图: 大家看到这个效果 ...

  3. for-in循环(for-in Loops)

    for-in循环应该用在非数组对象的遍历上,使用for-in进行循环也被称为“枚举”. 从技术上将,你可以使用for-in循环数组(因为JavaScript中数组也是对象),但这是不推荐的.因为如果数 ...

  4. 打FFT时中发现的卡常技巧

    题目:洛谷P1919 A*B Problem 加强版 我的代码完全借鉴boshi,然而他380ms我880ms...于是我通过彻底的卡(chao)常(dai)数(ma)成功优化到了380ms,都是改了 ...

  5. 【PAT】1060 Are They Equal (25)(25 分)

    1060 Are They Equal (25)(25 分) If a machine can save only 3 significant digits, the float numbers 12 ...

  6. 桌面图形化安装的CentOS6.7中默认安装的yum不能正常使用

    使用rpm -qa|grep yum,可以发现有好多关于yum的安装插件等东西... 从里面将的一些东西删除掉,只留下下面三个即可,其余的全部删除掉rpm -e yum-plugin-security ...

  7. tail -f 与 tail -F的区别

    使用tail -f监控某个文件,将在另一个窗口将该文件删除后,然后再新创建,那么我们会发现tail -f的监制失效了.而使用tail -F会再次进行监控.

  8. 008.MySQL-Keepalived搭配脚本02

    vim /etc/keepalived/check_MySQL.sh #!/bin/sh #isok=$(sed -n '2p' /etc/keepalived/result.txt) isok=$( ...

  9. webpack4.x配置详情

    webpack打包工具现在非常流行,熟悉并且能够进行配置也变得非常重要.在学习和使用的过程中遇到过很多的问题,希望能够让自己记录下来,巩固自己的学习. 1.创建文件目录 先在自己的常用盘中(我自己的项 ...

  10. Redis创建高可用集群教程【Windows环境】

    模仿的过程中,加入自己的思考和理解,也会有进步和收获. 在这个互联网时代,在高并发和高流量可能随时爆发的情况下,单机版的系统或者单机版的应用已经无法生存,越来越多的应用开始支持集群,支持分布式部署了. ...