C# 如何判断URL是否为内部网URL?

C# 如何判断URL是否为内部网URL?,c#,.net,C#,.net,使用C#如何确定URL是否为内部网URL?如果URL是内联网而不是公共的,我想要一些代码来做一些事情。您知道内部子网(IP地址方面)吗?如果是这样的话,我只需要解析主机名,然后看看它是否是内部的。您不能隐式地知道。如果您的intranet URL看起来像完全限定的域名,那么很难判断。唯一的方法是查询两个不同的DNS服务器(您自己的和一个公共的)。如果两者返回相同的结果,则它是一个internet域。如果公共DNS服务器无法解析地址,那么它很可能是一个intranet域。一般来说,没有可靠的方法来

使用C#如何确定URL是否为内部网URL?如果URL是内联网而不是公共的,我想要一些代码来做一些事情。

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

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

一般来说,没有可靠的方法来区分intranet URL和Internet URL。如果您的程序可以使用intranet,那么它看起来就像Internet,如果没有,那么您仍然不知道该URL应该是一个工作的intranet URL还是一个(暂时)中断的Internet URL


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

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

通常,但并非总是,itranet URL没有TLD(顶级域,如
.com
)。不过,我也看到过一些这样的例子


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

如果url解析为tcpIp地址,而tcpIp地址是作为专用IP地址保留的IP地址之一,那么它肯定在您的Intranet上。这些是

  • 10.xxx.xxx.xxx
  • 172.16.xxx.xxx至172.31.xxx.xxx,以及
  • 192.168.xxx.xxx

  • 如果它解析为任何其他IP地址,可能仍在您的intranet上,但它有一个公共IP地址,因此可以从intranet外部访问它,以添加其他人所说的内容,intranet的地址中没有任何已知的顶级域。我在几家公司工作过,所有的内部网都是这样的:

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

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


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

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

    您可以询问internet explorer,查看该域是否与已接受的Intranet域列表相匹配

    注册表项为HKEY\U CURRENT\U USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains


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

    我见过一些疯狂的设置,其中intranet站点的名称类似于“intranet.com”,它在内部解析为intranet,但实际上是由外部任意公司拥有的实时域。您不仅要检查它是否从两个DNS服务器解析,还要检查它是否解析为相同的内容。如果您对内部IP和外部IP有先验知识,则此解决方案(将名称解析为IP)将起作用。如果您添加一点配置(内联网的有效IP范围列表),问题就解决了。这不是一个很好的解决方案,但它会起作用。另一个问题是,如果主机解析为可路由IP,因为您的组织具有有效的a类IP,它将其用作intranet IP。使用.Net之类的工具会让生活变得很艰难。SLaks,这重要吗?我认为这是一个合理的问题……它将帮助我们给出更好的答案,特别是如果我们知道他在寻找什么样的内部网,我总是使用.local()作为内部名称空间。i、 e.supermegacorp.com在内部将是supermegacorp.local。如果每个人都这样做,这个问题的解决方案将是微不足道的。当然。本地可能不适用于所有人,但我还没有找到它不适用的地方。我以前从未见过使用
    .local
    。我见过一个环境,内联网托管在公司外部域名的子域上。这并不总是正确的。+1,正如我在对另一个回复的评论中详述的那样,正如您所指出的,一些组织使用可路由IP作为内部网IP。令人困惑的是,在使用网络共享时,.Net的安全性在很大程度上是基于这些。如果你有幸拥有这些IP,那么我发现这是一种有效的检查方法。这个解决方案也会因IP6而中断。虽然IP6保留了私有IP地址,但一般建议不要使用它们来避免地址转换。询问internet explorer否,即使你折磨它,IE也不会背叛Microsoft。;)