c# - 使用 "System.Net.Dns.GetHostEntry()"获取网站的 IP 地址,与某些在线 IP 检查器站点相比,将给出不同的结果

标签 c# .net dns system.net

我正在开发一个 c# 控制台应用程序,在我的控制台应用程序中,我有以下代码来获取网站的 IP:-

using System.Net
using System.Web;
using System.IO;

namespace MyConsoleApp
{
    class Program
    {
      static async Task Main(string[] args)
        {
          IPHostEntry hosten = Dns.GetHostEntry("www." + website);
          if (hosten.AddressList.Count() >= 1)
              {
               string ip = hosten.AddressList[0].ToString();

但是与我从一些在线 IP 检查站点(例如 https://www.site24x7.com/find-ip-address-of-web-site.html)获得的 IP 相比,我为该网站获得的 IP 将有所不同。 .. 正在使用 System.Net.Dns.GetHostEntry()了解网站 IP 地址的可信方法?如果答案是肯定的,那么为什么我从在线 IP 检查器站点获得不同的 IP?

最佳答案

网站拥有多个 IP 地址是很常见的。一个网站可以分布在多个地方和地区,使用多个 IP 地址有助于负载平衡和网络流量优化等。一种常见的技术是将请求路由到最近的 IP(尽管主动负载平衡可以阻止它),因此,在线 IP 检查器可以生成更接近它的 IP。

为什么?由于 DNS 是一个分层的分布式区域数据库,因此 Google 可能在中国拥有一个(或多个)IP 地址,这意味着它将主要在该地区的 DNS 服务器中注册。因此,来自中国的对谷歌 IP 的朴素查询将产生那个/那些 IP,而来自澳大利亚的查询将产生另一个/其他 IP。

更复杂的是,像 Cloudflare 这样的内容交付网络公开了一个网站的 IP,这不是它的真实 IP。他们将其作为 DDoS 缓解和整体 Web 安全策略的一部分。

上述所有情况都使得很难获得包含特定网站 IP 地址的完整和通用列表的列表。但是,如果您从同一位置查询相同的 DNS 服务器,您应该获得分配给该主机的相当恒定的 IP 地址列表。

现在,关于您的代码,当您这样做时:

hosten.AddressList[0]

您只使用该列表中的第一个 IP 地址,可能是 只有 IP,如果该特定主机只有一个,但可能是该主机的多个已解析 IP 中的第一个。您必须检查 AddressList 的所有元素.

关于c# - 使用 "System.Net.Dns.GetHostEntry()"获取网站的 IP 地址,与某些在线 IP 检查器站点相比,将给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58595246/

相关文章:

java - 从 DNS 响应获取 IP

c# - .NET 正则表达式替换单行匹配未知字符

c# - XmlNode 值与 InnerText

c# - 选择前 10 条记录,然后选择下 10 条记录,使用 Linq 进行分页

C# - 将数据集保存到 XML

.net - 安装后如何自动启动服务?

java - SmbException : A duplicate name exists on the network: how to prove that a few servers have the same DNS name 异常

url - 在搜索中显示特定国家/地区的网站

c# - 包含相同参数的 ViewResult 和 ActionResult 出错

c# - Azure 应用服务 - .net 版本支持 - 更新(HTTP 500.31 错误)?