【发布时间】:2012-07-25 14:58:20
【问题描述】:
我想知道某个服务器设置。
假设我有一个在本地网络上运行的 Web 服务器,可以使用诸如 www.example.com 之类的 URL 从网络内部和外部访问它。
我希望我的 PHP 网站能够确定请求是来自内部 LAN 还是来自外部。我怀疑使用 IP 地址是否有可能,因为请求看起来好像来自公共 IP 地址,而不是内部 IP 地址 192.168.x.x。此外,公共 IP 可能会不时更改。
这可能吗,我如何在 PHP 中实现这一点?
【问题讨论】:
-
如果服务器在网络内部,来自网络内部的任何请求都将来自 LAN IP 地址。只需尝试回显
$_SERVER['REMOTE_ADDR'],您就会看到。 -
@dave:不一定。如果 example.com 解析为外部 IP,则内部请求可能会从前门往返并显示为“外部”,无论如何。
-
这个问题与 PHP 无关——这将是一个实现细节。据我了解,OP 询问如何在不使用 IP 的情况下识别客户端。对吗?
-
@MarcB(该死,你对我的评论编辑来说太快了)......在这种情况下,所有内部请求似乎都来自你自己的公共 IP - 所以如果你试图是确定内部还是外部,您可以放心使用它。当然,如果你想确定哪个 LAN 客户端是源,你就有点卡住了。如果您使用的是 Windows 域,虽然您可以强制 LAN 客户端使用 IE 并使用 NTLM 身份验证,但这很讨厌。
-
@MichaelFrey
$host = explode(':', $_SERVER['HTTP_HOST']); if ($_SERVER['REMOTE_ADDR'] == gethostbyname($host[0])) { echo 'Internal'; } else { echo 'External'; }- 有效,我刚刚测试过。explode()之所以存在,是因为$_SERVER['HTTP_HOST']还可能包含一个端口号,这会破坏 DNS 查找。
标签: php webserver httprequest