【问题标题】:How to tell if a URL is an intranet url?如何判断一个 URL 是否是 Intranet url?
【发布时间】:2010-11-27 14:32:32
【问题描述】:

使用 C# 如何确定一个 URL 是否是 Intranet URL?如果 URL 是 Intranet 而不是公共 URL,我想要一些代码来做某事。

【问题讨论】:

  • 这很重要吗,SLaks?我认为这是一个合理的问题...
  • 这将有助于我们给出更好的答案,特别是如果我们知道他正在寻找什么样的内网。

标签: c# .net


【解决方案1】:

你不能隐含地知道。如果您的 Intranet url 看起来像完全限定的域名,那么很难分辨。唯一的判断方法是查询两个不同的 DNS 服务器(您自己的和公共的)。如果两者都返回相同的结果,那么它是一个互联网域。如果公共 DNS 服务器无法解析地址,则很可能是 Intranet 域。

【讨论】:

  • 我见过一些疯狂的设置,其中 Intranet 站点被命名为“intranet.com”,它在内部解析为 Intranet,但它是外部任意公司拥有的真实域名.您不仅要检查它是否从两个 DNS 服务器解析,还要检查它是否解析为相同的东西。
  • 如果您先验地知道什么是内部 IP 与外部 IP,则此解决方案(将名称解析为 IP)将起作用。如果您添加一点配置(Intranet 的有效 IP 范围列表),您的问题就解决了。不是一个很好的解决方案,但它会起作用。
  • 另一个问题是,如果主机解析为可路由 IP,因为您的组织有有效的 A 类 IP,它用作 Intranet IP。 .Net 之类的东西让生活变得非常艰难。
【解决方案2】:

您知道内部子网(根据 IP 地址)吗?如果是这样,我只需解析主机名,看看它是否是内部的。

【讨论】:

    【解决方案3】:

    如果 url 解析为 tcpIp 地址,该地址是预留为私有 IPAddress 的 IP 地址之一,那么它肯定在您的 Intranet 上。这些是

    1. 10.xxx.xxx.xxx,
    2. 172.16.xxx.xxx 到 172.31.xxx.xxx,以及
    3. 192.168.xxx.xxx

    如果它解析为任何其他 IP 地址,它可能仍然在您的 Intranet 上,但它有一个公共 IP 地址,因此可以从 Intranet 外部访问它

    【讨论】:

    • +1,正如我在对另一个回复的评论中详述的那样,正如您所指出的,某些组织使用可路由 IP 作为 Intranet IP。令人困惑的是,当使用网络共享时,.Net 的安全性在很大程度上基于这些。如果您有幸拥有这些 IP,那么我认为这是一种有效的检查方式。
    • 此解决方案也适用于 IP6。虽然 IP6 保留了私有 IP 地址,但一般建议不要使用它们以避免地址转换。
    【解决方案4】:

    简单但不完美但适用于 80% 情况的方法是简单地检查 URL 中是否有句点。我知道 Intranet URL 可以是完全限定的,但根据我(在 Microsoft)的经验,大多数都没有,而且效果很好。

    【讨论】:

      【解决方案5】:

      一般来说,没有可靠的方法来区分 Intranet URL 和 Internet URL。如果 Intranet 对您的程序可用,那么它看起来就像 Internet,如果不是,那么您仍然不知道该 URL 是否应该是工作的 Intranet URL 还是只是(暂时)损坏的 Internet URL .

      您将需要一些特殊知识,例如提供 Intranet 的服务器的域名或 IP,以便区分它们。

      【讨论】:

        【解决方案6】:

        如果您想确定任何给定 URL 是否是任何公司的内部网 URL(而不是专门为某个特定公司编写代码),祝您好运。

        通常但并非总是如此,itranet 网址没有 TLD(顶级域,例如 .com)。不过,我见过一些这样做的。

        几乎总是 (AFAIK),Intranet 域将解析为与计算机当前地址类似的 IP 地址。请注意,我没有说同一个子网;大型 Intranet 可以有多个子网。另请注意,如果计算机不在公司 Intranet 中,会有解析为相似 IP 地址的常规域名。 (除非计算机在 NAT 后面)

        【讨论】:

        • 我总是使用 .local (en.wikipedia.org/wiki/.local) 作为内部命名空间。即 supermegacorp.com 在内部将是 supermegacorp.local。如果每个人都这样做,那么这个问题的解决方案将是微不足道的。当然 .local 可能并不适合所有人,但是我还没有找到它不起作用的地方。
        • 我以前从未见过.local。我见过一种环境,其中 Intranet 托管在公司外部域名的子域上。
        【解决方案7】:

        我不是 C# 程序员,所以我不能为您提供代码,但基本方法是将 URL 的主机名部分与您的 Intranet 中的服务器的主机名部分进行比较。或者,如果您的 URL 仅使用 IP 而不是 DNS 名称,请将 IP 与您的 Intranet 服务器的 IP 进行比较。

        使用字符串操作来破解 URL - 虽然我认为 C# 必须有一个 URL 类可以为您完成此操作 - 并提取主机名,将其与服务器列表进行比较。

        【讨论】:

          【解决方案8】:

          您可以询问 Internet Explorer 以查看该域是否与接受的 Intranet 域列表匹配。

          注册表项是 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains

          如果域的协议值为 1,它将被视为 Intranet 域。您需要执行 nslookup 来收集“真实”地址。

          【讨论】:

          • 询问 Internet Explorer 不,即使你折磨它,IE 也不会背叛微软。 ;)
          【解决方案9】:

          补充其他人所说的,Intranet 的地址中没有任何已知的顶级域。我在几家公司工作过,所有的 Intranet 都是这样的:

          http://developments/admin - 你会注意到根本没有顶级域。因此,它解析为网络内的计算机。同样,顾名思义,您不太可能在公司环境之外访问它。

          【讨论】:

          • 在乔尔的帖子中提到。这并不总是正确的。
          猜你喜欢
          • 2011-01-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-05-07
          • 2014-11-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多