如何获得浏览器IP或者主机名?

时间:2020-03-05 18:48:08  来源:igfitidea点击:

我有一个Web应用程序,其内部用户的行为应不同于外部用户。该Web应用程序可通过Internet进行访问,因此对于内部用户也很明显。

所有用户都是匿名的,未经身份验证,但是该页面对内部用户的呈现方式应不同于对外部用户的呈现方式。我在代码中执行的操作是使用Request.UserHostName和Dns.GetHostEntry。然后将结果与我的web.config中的设置(包含* .mydomain.local之类的)进行比较。如果比较得到肯定的结果,那么我呈现内部用户应该看到的HTML,否则我呈现外部用户应该看到的HTML。

但是,我的问题是我并不总是从Request.UserHostName中获得期望值。在开发站点上,我获得了运行浏览器的计算机的IP地址(?),但是在客户站点上,我没有获得用户计算机的IP地址,而获得了其他IP地址。 `。浏览器没有设置任何代理或者类似内容。

我应该使用" Request.UserHostName"之外的其他东西吗?

解决方案

回答

可能存在执行某种NAT的防火墙,以使内部客户端可以使用外部dns-name到达服务器。

我们从客户站点获得的IP号码在外部客户服务器ip上是否相同?在这种情况下,我们可以为该IP地址进行硬编码。该防火墙后面的所有内部计算机似乎都具有相同的ip地址,我们可以将它们分类为"内部"。

回答

好像我们正在返回公开的IP地址。让用户转到http://www.myipaddress.com。如果这与返回给我们软件的IP地址相同,则肯定是这种情况。

我能看到的唯一解决方案是让它们通过VPN连接到装有asp.net应用程序的计算机,或者使用其他某种身份验证。后者可能是最佳选择。

回答

尝试Request.UserHostAddress,它返回客户端的IP地址。假设内部网络使用为LAN保留的IP地址,则检查IP是内部还是外部应该相对简单。

回答

听起来好像用户和客户站点上的服务器之间存在代理(不需要在浏览器中配置)。根据网络配置,它可以是内部或者外部代理。

我会避免使用UserHostName进行有效的身份验证,因为浏览器会在请求中显示该内容,并且很容易欺骗。 IP地址将更加有效,因为很难在TCP / IP连接中欺骗IP地址(并保持连接)。它的身份验证仍然很弱,但是在这种情况下可能就足够了。

即使我们使用的是IP地址,如果客户端和服务器之间都有NAT代理,我们可能也必须接受通过该代理传递的任何内容都是受信任的(我假设外部/不受信任的客户端不会通过该代理传递)。

如果不可接受,我们将返回其他身份验证方法。我们可能不需要考虑登录或者VPN连接,而可以考虑使用永久性cookie或者客户端证书,并且仅将其提供给内部客户端,但是我们需要某种方式将其传递给客户端。我们当然可以基于一次性登录交付一个永久性cookie。 Cookie可以通过类似的方式欺骗​​,因为可以使用UserHostName,但是我们有更好的机会创建比域名更容易猜测的Cookie值。

回答

我建议也使用IP地址。我现在正在处理与设置身份验证系统完全相同的情况,而Epso和Robin M所描述的条件正是正在发生的情况。来此站点的外部用户会给我他们的实际IP地址,而所有内部用户都将网关计算机(路由器)的IP地址提供给Web服务器所在的专用子网。

为了解决这个问题,我只需要检查那个IP。如果获得网关的IP,则提供内部访问。如果我得到其他任何东西,他们会得到外部的,在我的情况下需要额外的身份验证。在情况下,这仅意味着不同的界面。