当前位置:  开发笔记 > 编程语言 > 正文

获取IP地址

如何解决《获取IP地址》经验,为你挑选了1个好方法。

在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地址后,它现在显示在第二个最后位置,因此需要使用以下代码进行访问:

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

是否有任何代码以十进制表示法检索IP地址,而不管它在IPHostEntry变量中的位置?



1> EventHorizon..:

假设你只想要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中有记录.

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有