我正在运行一个服务器,我想显示我自己的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;

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


当前回答

也许通过外部IP,您可以考虑(如果您在Web服务器上下文中)使用此方法

Request.ServerVariables["LOCAL_ADDR"];

我也在问你同样的问题,我在这篇stackoverflow的文章中找到了它。

这对我很管用。

其他回答

如果你想避免使用DNS:

List<IPAddress> ipList = new List<IPAddress>();
foreach (var netInterface in NetworkInterface.GetAllNetworkInterfaces())
{
    foreach (var address in netInterface.GetIPProperties().UnicastAddresses)
    {
        if (address.Address.AddressFamily == AddressFamily.InterNetwork)
        {
            Console.WriteLine("found IP " + address.Address.ToString());
            ipList.Add(address.Address);
        }
    }
}

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

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

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

:

if (ip.AddressFamily == AddressFamily.InterNetwork)

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

WebClient webClient = new WebClient();
string IP = webClient.DownloadString("http://myip.ozymo.com/");

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

Request.UserHostAddress
private static string GetLocalIpAdresse()
    {
        var host = Dns.GetHostEntry(Dns.GetHostName());
        foreach(var ip in host.AddressList)
        {
            if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
            {
                return ip.ToString();
            }
        }
        throw new Exception  ("No network adapters with an IPv4 address in the system");
    }