获取IP地址(Getting the ip-address)

2019-06-23 22:07发布

在C#:

IPHostEntry IPHost = Dns.GetHostEntry(Dns.GetHostName());

for (int i = 0; i < IPHost.AddressList.Length; i++)
{
    textBox1.AppendText("My IP address is: " 
        + IPHost.AddressList[i].ToString() + "\r\n");
}

在这段代码中, IPHostEntry变量包含计算机的所有IP地址。 现在,据我所知,Windows Vista中返回一个数字IP地址一些十六进制,有的在十进制格式,等等。

的问题是,这是所期望的十进制记数法中改变其位置IPHostEntry变量:它最初是在最后的位置存在的,因此可以与代码访问:

string ipText = IPHost.AddressList[IPHost.AddressList.Length - 1].ToString();

更改计算机的IP地址后,但是,现在出现在2日最后一个位置,因此需要使用代码访问:

string ipText = IPHost.AddressList[IPHost.AddressList.Length - 2].ToString();

有没有在十进制获取IP地址不论其位置的任何代码IPHostEntry变量?

Answer 1:

假设你只需要IPv4地址,我目前使用此代码(修改了一下用于发布的),这是我的使用足够强大。 只需调用的结果的ToString以获取地址:

// return the first IPv4, non-dynamic/link-local, non-loopback address
public static IPAddress GetIPAddress()
{
    IPAddress[] hostAddresses = Dns.GetHostAddresses("");

    foreach (IPAddress hostAddress in hostAddresses)
    {
        if (hostAddress.AddressFamily == AddressFamily.InterNetwork &&
            !IPAddress.IsLoopback(hostAddress) &&  // ignore loopback addresses
            !hostAddress.ToString().StartsWith("169.254."))  // ignore link-local addresses
            return hostAddress;
    }
    return null; // or IPAddress.None if you prefer
}

169.254。*一部分可能看起来像一个黑客,但在被记录IETF RFC 3927 。



Answer 2:

我相信你是问的是,你可以在IPv4和IPv6地址之间的区别你的DNS查询返回。 答案是肯定的。 检查AddressFamily财产上的ip地址,并确保它返回互联网络 。



Answer 3:

十六进制地址是IPv6中,4成十进制数字的人是IPv4的。



文章来源: Getting the ip-address