日期:2014-05-17  浏览次数:20507 次

获取客户端IP地址
讲一下我系统的大概:本系统是管理用户权限的,下面有很多应用系统,他们的用户登录都是透过本系统提供的登陆验证WEB SERVICE,系统有WEB和ERP,所说的“获取客户端(用户)的IP地址”中的客户端就是访问这些系统的登陆页面的用户电脑IP地址。

结构:用户登录(用户的电脑)->访问各个应用系统(很多系统对应很多服务器主机)->各个系统的主机调用登录WEB SERVICE(一个指定的服务器主机)验证用户、返回登陆信息,而我要在这个WEB SERVICE中取得用户登录所使用电脑的IP地址。

目前做法:在WEB SERVICE中添加方法,调用这个WEB服务的时候记录下调用这个服务的主机的IP地址。问题来了:用户访问的是各个应用系统,应用系统去调用WEB服务。等于说是各个应用系统所在主机去调用WEB服务,这样记录下来的是各个应用系统所在主机的IP地址,根本就没用户客户端什么事。愁人……

想让各个系统在登陆页面获取登陆信息传入WEB服务这种方式可行,但是不太现实,因为涉及的系统太多,不可能叫他们一一修改。不知道有没有更好的方式?

请问大家有没有做过相关的,或者有思路的也可以给我说下,谢谢了!
web服务 服务器 web service 获取登陆IP

------解决方案--------------------
Request.ServerVariables["REMOTE_ADDR"]
------解决方案--------------------
严格来说,无论什么办法,你都只能获取(或者说相信)请求来自的公网出口地址,而不是请求发自的主机ip地址。
------解决方案--------------------
这个只能修改你的接口, 传递多一个用户IP地址参数. 要么另外写多一个接口提供应用系统调用获取用户IP地址.
------解决方案--------------------
楼上都是些瞎贴代码的,楼主根本没有提及到代理服务器的概念,你们为什么都那么自然的往proxy上带呢?

看看楼主给出的访问路径:
=============
用户登录(用户的电脑)->
  访问各个应用系统(很多系统对应很多服务器主机)->
     各个系统的主机调用登录WEB SERVICE(一个指定的服务器主机)验证用户 -->
        返回登陆信息
中间哪里有任何一台proxy存在?你们不会认为"各个系统的主机调用登录WEB SERVICE",就是proxy server吧?这些server难道会转发客户端的http信息?
=============

明确的告诉楼主,由于"各个系统的主机调用登录WEB SERVICE" 不会转发客户端的http原始的请求信息,所以不能简单的从 登录WEB SERVICE 去获取原始客户端的IP,因为客户端信息在中途已经被丢失了.



------解决方案--------------------
解决好说一下,学习下
------解决方案--------------------
可以用先从客户端获取IP,各系统在调用WebService时传入IP,WebService就可以接收IP地址信息了。 

从各系统调用WebService时可以用SoapHeader来传入IP信息,这样系统原有方法都不需要修改,只要先传SoapHeader信息即可。