我有以下代码:
Dim ipAdd As IPAddress = Dns.GetHostEntry(strHostname).AddressList(0)
Dim strIP As String = ipAdd.ToString()当我转换为字符串而不是192.168.1.0或类似的IPv4地址时,我得到了IPv6版本: fd80::5dbe:5d89:e51b:d313地址。
有没有办法从IPAddress类型返回IPv4地址?
谢谢
发布于 2010-01-12 18:20:16
您可以使用第一个IPv4地址,而不是无条件地获取AddressList的第一个元素:
var address = Dns.GetHostEntry(strHostname)
.AddressList
.First(ip => ip.AddressFamily == AddressFamily.InterNetwork);发布于 2011-02-17 00:29:52
dtb的解决方案将在许多情况下工作。但是,在许多情况下,用户可能会在其系统上设置多个v4 In。有时这是因为他们有一些“虚拟”适配器(来自VirtualBox或VMWare等应用程序),或者因为他们有多个物理网络适配器连接到他们的计算机。
不用说,在这些情况下,使用正确的IP是很重要的。您可能需要考虑询问用户哪个IP是合适的。
要获取可用的v4 IP列表,您可以使用类似于以下代码的代码:
'Get an array which contains all available IPs: Dim IPList() As IPAddress = Net.Dns.GetHostEntry(Net.Dns.GetHostName.ToString).AddressList'Copy valid IPs from IPList to FinalIPList
Dim FinalIPList As New ArrayList(IPList.Length)
For Each IP As IPAddress In IPList
'We want to keep IPs only if they are IPv4 and not a 'LoopBack' device
'(an InterNetwork AddressFamily indicates a v4 IP)
If ((Not IPAddress.IsLoopback(IP)) And (IP.AddressFamily = AddressFamily.InterNetwork)) Then
FinalIPList.Add(IP)
End If
Next IP发布于 2012-08-30 19:10:41
对我来说,带有"First“谓词的解决方案不能正常工作,这是对我有效的代码:
public static string GetLocalIP()
{
string ipv4Address = String.Empty;
foreach (IPAddress currrentIPAddress in Dns.GetHostAddresses(Dns.GetHostName()))
{
if (currrentIPAddress.AddressFamily.ToString() == System.Net.Sockets.AddressFamily.InterNetwork.ToString())
{
ipv4Address = currrentIPAddress.ToString();
break;
}
}
return ipv4Address;
}https://stackoverflow.com/questions/2048132
复制相似问题