C#如何获取当前主机的IP地址

文章目录

  • 解决方案
    • 获取主机名
    • 获取IP地址
    • 过滤IPv4地址
  • 函数
  • 函数调用

解决方案

获取主机名

Dns 类提供了一组用于域名系统 (DNS) 操作的静态方法。

Dns.GetHostName();

我们可以使用Dns.GetHostName()方法来获取本地计算机的主机名, 这是一个静态方法。该方法调用操作系统的网络栈,以获取计算机的主机名。主机名是一个用来标识网络上的设备的名称。在网络中,每个设备都有一个唯一的主机名,通过主机名可以在网络中进行设备间的通信。

获取IP地址

Dns.GetHostAddresses(hostName);

获取到主机名后,我们使用Dns.GetHostAddresses(hostName)方法来获取IP列表,这也是一个静态方法,用于获取指定主机名(或 IP 地址字符串)对应的 IP 地址列表。它接受一个主机名或 IP 地址作为参数,并返回一个 IPAddress[] 数组,其中包含与该主机名或 IP 地址关联的所有 IP 地址。

该方法首先尝试解析参数中传入的主机名。如果传入的是一个有效的主机名,它将查询 DNS 服务器以查找与该主机名对应的 IP 地址。如果找到了相关的 IP 地址,将返回一个包含这些 IP 地址的数组。

另外,如果传入的参数是一个有效的 IP 地址字符串(例如:“192.168.0.1”),那么方法将直接将该字符串解析为一个 IPAddress 对象并放入数组中返回。

该方法在解析过程中,如果遇到了问题或访问权限的限制,会抛出异常,如 SocketException 或 SecurityException。

过滤IPv4地址

可以通过一个枚举值AddressFamily.InterNetwork来过滤IPv4地址。

AddressFamily 是一个枚举类型,定义了不同的网络地址类型。其中,InterNetwork 表示 IPv4 地址,InterNetworkV6 表示 IPv6 地址,Unix 表示 Unix 域套接字地址等。

函数

using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System;

public static List<string> GetIPv4Addresses()
{
    string hostName = Dns.GetHostName();
    IPAddress[] addresses = Dns.GetHostAddresses(hostName);

    List<string> ipv4Addresses = new List<string>();

    foreach (IPAddress address in addresses)
    {
        // 判断是否为IPv4地址
        if (address.AddressFamily == AddressFamily.InterNetwork)
        {
            ipv4Addresses.Add(address.ToString());
        }
    }

    return ipv4Addresses;
}

该函数将返回找到的所有IPv4地址,调用后会得到一个包含所有找到的IPv4地址的列表。如果没找到IPv4地址,则返回一个空列表。

函数调用

打印出找到的所有IPv4地址。
函数调用如下:

List<string> ipv4Addresses = GetIPv4Addresses();

foreach (string address in ipv4Addresses)
{
    Console.WriteLine(address);
}

你可能感兴趣的:(C#,c#,tcp/ip,php)