c# - 使用“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?
解决方案
网站拥有多个 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
。
推荐阅读
- ionic-framework - Ionic Pro 打包 IOS 应用程序错误
- specman - Specman e 有 struct 构造函数吗?
- sql - 如何编写更新 SQL 以从一个表中复制多条记录以更新另一表上的相应字段?
- javascript - Object.assign not copying as expected in loop
- java - 是否可以在 jooby/java 中多次访问 request.body
- android-studio - 安卓工作室 3.1.2。AVD 不兼容的 HAX 模块版本 3,需要最低版本 4
- mysql - MySQL 能源系统建模数据库 EAV 设计
- python-2.7 - 过滤熊猫数据框无法返回字段中包含的值的记录
- wordpress - 注意:网站所有者已为您的用户角色禁用 Google Analytics(分析)跟踪
- r - ggplot2中斜率的线条颜色和宽度