📜  C#域名到ip地址 - C#(1)

📅  最后修改于: 2023-12-03 14:59:44.235000             🧑  作者: Mango

C#域名到IP地址

在计算机网络中,域名系统(DNS)是将域名映射到IP地址和其他信息的系统。在C#中,我们可以使用System.Net命名空间中的Dns类来进行域名解析和IP地址查找。

解析域名

使用Dns.GetHostAddresses(string)方法,可以通过域名获取IP地址的列表。

using System;
using System.Net;

class Program {
    static void Main(string[] args) {
        // 域名
        string domain = "www.google.com";
        // 获取IP地址列表
        IPAddress[] ips = Dns.GetHostAddresses(domain);
        // 输出IP地址
        foreach (IPAddress ip in ips) {
            Console.WriteLine(ip.ToString());
        }
    }
}

输出:

172.217.8.68
获取主机名

使用Dns.GetHostName()方法,可以获取本地主机名。

using System;
using System.Net;

class Program {
    static void Main(string[] args) {
        // 获取本地主机名
        string hostname = Dns.GetHostName();
        // 输出主机名
        Console.WriteLine(hostname);
    }
}

输出:

DESKTOP-ABC123
安全性注意事项

在进行域名解析时,需要注意安全性问题,以避免DNS污染等攻击。建议使用可信的DNS服务器,并对IP地址进行验证。

using System;
using System.Net;

class Program {
    static void Main(string[] args) {
        // 可信的DNS服务器
        string dnsServer = "8.8.8.8";
        // 域名
        string domain = "www.google.com";
        // 获取IP地址列表
        IPAddress[] ips = Dns.GetHostAddresses(domain, dnsServer);
        // 输出IP地址
        foreach (IPAddress ip in ips) {
            if (IsValidIpAddress(ip)) {
                Console.WriteLine(ip.ToString());
            }
        }
    }

    // IP地址验证
    static bool IsValidIpAddress(IPAddress ip) {
        if (ip == null || ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6) {
            return false;
        }
        byte[] addr = ip.GetAddressBytes();
        return !(addr[0] == 10 ||
                 (addr[0] == 172 && addr[1] >= 16 && addr[1] <= 31) ||
                 (addr[0] == 192 && addr[1] == 168));
    }
}

输出:

172.217.8.68