我正在运行一个服务器,我想显示我自己的IP地址。

获取计算机自身(如果可能的话,外部)IP地址的语法是什么?

有人编写了以下代码。

IPHostEntry host;
string localIP = "?";
host = Dns.GetHostEntry(Dns.GetHostName());
foreach (IPAddress ip in host.AddressList)
{
    if (ip.AddressFamily.ToString() == "InterNetwork")
    {
        localIP = ip.ToString();
    }
}
return localIP;

然而,我通常不信任作者,我不理解这段代码。有更好的方法吗?


当前回答

LINQ解决方案:

Dns.GetHostEntry(Dns.GetHostName()).AddressList.Where(ip => ip.AddressFamily == AddressFamily.InterNetwork).Select(ip => ip.ToString()).FirstOrDefault() ?? ""

其他回答

我只是想添加我自己的一行代码(尽管已经有许多其他有用的答案)。


string ipAddress = new WebClient().DownloadString("http://icanhazip.com");

如果你在内部网络中运行,你将能够获得本地机器的IP地址,如果不是,你将获得外部IP地址: 网络:

//this will bring the IP for the current machine on browser
System.Web.HttpContext.Current.Request.UserHostAddress

桌面:

//This one will bring all local IPs for the desired namespace
IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName());

这是在VB中获取所有本地ip的csv格式。网

Imports System.Net
Imports System.Net.Sockets

Function GetIPAddress() As String
    Dim ipList As List(Of String) = New List(Of String)
    Dim host As IPHostEntry
    Dim localIP As String = "?"
    host = Dns.GetHostEntry(Dns.GetHostName())
    For Each ip As IPAddress In host.AddressList
        If ip.AddressFamily = AddressFamily.InterNetwork Then
            localIP = ip.ToString()
            ipList.Add(localIP)
        End If
    Next
    Dim ret As String = String.Join(",", ipList.ToArray)
    Return ret
End Function

这个问题没有说ASP。NET MVC,但我还是把这个留在这里:

Request.UserHostAddress

不,这几乎是最好的方法。由于一台机器可能有多个IP地址,您需要迭代它们的集合以找到合适的一个。

编辑:我唯一想改变的是改变这个:

if (ip.AddressFamily.ToString() == "InterNetwork")

:

if (ip.AddressFamily == AddressFamily.InterNetwork)

不需要ToString一个枚举进行比较。