首页 > 解决方案 > 使用“System.Net.Dns.GetHostEntry()”获取网站的 IP 地址,与某些在线 IP 检查器站点相比,将给出不同的结果

问题描述

我正在开发 ac# 控制台应用程序,在我的控制台应用程序中,我有以下代码来获取网站的 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?

标签: c#.netdnssystem.net

解决方案


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

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

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

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

现在,关于您的代码,当您执行以下操作时:

hosten.AddressList[0]

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


推荐阅读