In 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 地址,无论其在 IP 地址中的位置如何IPHostEntry
多变的??
假设您只需要 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.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)