【发布时间】:2010-11-27 14:32:32
【问题描述】:
使用 C# 如何确定一个 URL 是否是 Intranet URL?如果 URL 是 Intranet 而不是公共 URL,我想要一些代码来做某事。
【问题讨论】:
-
这很重要吗,SLaks?我认为这是一个合理的问题...
-
这将有助于我们给出更好的答案,特别是如果我们知道他正在寻找什么样的内网。
使用 C# 如何确定一个 URL 是否是 Intranet URL?如果 URL 是 Intranet 而不是公共 URL,我想要一些代码来做某事。
【问题讨论】:
你不能隐含地知道。如果您的 Intranet url 看起来像完全限定的域名,那么很难分辨。唯一的判断方法是查询两个不同的 DNS 服务器(您自己的和公共的)。如果两者都返回相同的结果,那么它是一个互联网域。如果公共 DNS 服务器无法解析地址,则很可能是 Intranet 域。
【讨论】:
您知道内部子网(根据 IP 地址)吗?如果是这样,我只需解析主机名,看看它是否是内部的。
【讨论】:
如果 url 解析为 tcpIp 地址,该地址是预留为私有 IPAddress 的 IP 地址之一,那么它肯定在您的 Intranet 上。这些是
如果它解析为任何其他 IP 地址,它可能仍然在您的 Intranet 上,但它有一个公共 IP 地址,因此可以从 Intranet 外部访问它
【讨论】:
简单但不完美但适用于 80% 情况的方法是简单地检查 URL 中是否有句点。我知道 Intranet URL 可以是完全限定的,但根据我(在 Microsoft)的经验,大多数都没有,而且效果很好。
【讨论】:
一般来说,没有可靠的方法来区分 Intranet URL 和 Internet URL。如果 Intranet 对您的程序可用,那么它看起来就像 Internet,如果不是,那么您仍然不知道该 URL 是否应该是工作的 Intranet URL 还是只是(暂时)损坏的 Internet URL .
您将需要一些特殊知识,例如提供 Intranet 的服务器的域名或 IP,以便区分它们。
【讨论】:
如果您想确定任何给定 URL 是否是任何公司的内部网 URL(而不是专门为某个特定公司编写代码),祝您好运。
通常但并非总是如此,itranet 网址没有 TLD(顶级域,例如 .com)。不过,我见过一些这样做的。
几乎总是 (AFAIK),Intranet 域将解析为与计算机当前地址类似的 IP 地址。请注意,我没有说同一个子网;大型 Intranet 可以有多个子网。另请注意,如果计算机不在公司 Intranet 中,会有解析为相似 IP 地址的常规域名。 (除非计算机在 NAT 后面)
【讨论】:
.local。我见过一种环境,其中 Intranet 托管在公司外部域名的子域上。
我不是 C# 程序员,所以我不能为您提供代码,但基本方法是将 URL 的主机名部分与您的 Intranet 中的服务器的主机名部分进行比较。或者,如果您的 URL 仅使用 IP 而不是 DNS 名称,请将 IP 与您的 Intranet 服务器的 IP 进行比较。
使用字符串操作来破解 URL - 虽然我认为 C# 必须有一个 URL 类可以为您完成此操作 - 并提取主机名,将其与服务器列表进行比较。
【讨论】:
您可以询问 Internet Explorer 以查看该域是否与接受的 Intranet 域列表匹配。
注册表项是 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains
如果域的协议值为 1,它将被视为 Intranet 域。您需要执行 nslookup 来收集“真实”地址。
【讨论】:
补充其他人所说的,Intranet 的地址中没有任何已知的顶级域。我在几家公司工作过,所有的 Intranet 都是这样的:
http://developments/admin - 你会注意到根本没有顶级域。因此,它解析为网络内的计算机。同样,顾名思义,您不太可能在公司环境之外访问它。
【讨论】: