如何确定客户端是通过Intranet还是Internet访问网站?

时间:2014-05-18 04:34:02

标签: php wordpress iis proxy http-proxy

情况是我在IIS 7.5上安装了WordPress,它通过代理访问互联网,网站的某些部分会发出客户端外部请求(图片,YouTube视频等),需要用户输入他们的代理凭证,如果他们通过内部网访问该网站。

我想隐藏网站的某些元素,如果它是通过内部网访问的,并且如果通过互联网访问它可以完全发挥作用。

我发现this SO answer有点帮助(是的,我因为IIS而将其更改为LOCAL_ADDR)但由于代理而失败了。

对站点的Internet请求通过同一网络上的代理,因此它认为每个请求都是内部网请求。

那么,如果我知道代理IP,如何改进此功能以适应我的情况?

function is_intranet() {
  $serverIP = explode('.',$_SERVER['LOCAL_ADDR']);
  $localIP  = explode('.',$_SERVER['REMOTE_ADDR']);
  return ( 
    ($serverIP[0] == $localIP[0]) && 
    (in_array($serverIP[0],array('127','10','172','192') ) ) 
  );
}

1 个答案:

答案 0 :(得分:0)

代理?我想你的意思是反向代理。如果是这样,许多反向代理会向原始请求添加额外的http标头。检查您的请求标头是否包含" X-Forwarded-For" http://en.wikipedia.org/wiki/X-Forwarded-For
一般来说,最后一项是你要找的东西 一个C#示例:

string xff = request.Headers["X-Forwarded-For"];
if (xff != null)
{
    string[] clientIPList = xff.Split(','); 
    string ip = clientIPList.Last();
}