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

ip地址映射后,取不到真实内往ip
这么表达吧,A公司有自己的内网,ip段是172.22.*.*。B公司也有自己的内网,ip段是10.211.*.*
目前A公司有一个系统提供内部服务给B公司某个系统,该Ws部署在172.22.120.89,B公司要访问的服务器ip是10.211.32.100。
目前A公司的网络运维部门是这么做的,把172.22.120.89映射到一个Ip:10.211.56.89。(这一块我完全不清楚是怎么弄得)这样B公司的内网中就能访问A公司该服务,但目前我这边想要通过限制B公司的Ip地址,不能随便来访问,比如只限制10.211.32.100这个地址能访问我的服务,所以我在代码里取对方来访问的IP,但是得不到对方10.211.32.100这个地址,不知道为什么。是因为映射过就得不到了,还是我取ip地址只能取到对方外网IP,不能区分内网ip?

主要是两个公司无法一起配合测试,我除了知道我的代码里记录的log里显示的ip没有B公司正常来访问的ip,其他要调试太麻烦,所以先问问大家原因或者有啥好的方案。


------解决方案--------------------
 有代理的话,你用下面的方法试试能不能取到
request.getHeader("x-forwarded-for");
request.getHeader("Proxy-Client-IP");
request.getHeader("WL-Proxy-Client-IP");

------解决方案--------------------
这个工作不该程序员来做,应该是网管做。
既然是A、B两个公司,那么他们之间应该是通过互联网连在一起的。从你的描述来看,应该是B公司为A公司提供了一个VPN接入,A公司的172.22.120.89通过VPN接入到B公司后,B公司分配给它的IP是10.211.56.89。
要想限制只允许10.211.32.100访问172.22.120.89,那么需要在172.22.120.89上配置防火墙来实现。
更好的做法是由A公司来提供VPN接入,让B公司的10.211.32.100通过VPN接入A公司。这样B公司没有VPN账号的计算机就不能访问172.22.120.89了。
通过编程的方法是不可能得到对方真实内网IP的,因为你收到的数据包里本身就已经没有对方内网IP了。