如何在C#中获取机器的IP地址

Posted

技术标签:

【中文标题】如何在C#中获取机器的IP地址【英文标题】:How to get the IP address of a machine in C# 【发布时间】:2011-01-02 10:18:26 【问题描述】:

如何在 C# 中获取机器的 IP 地址?

【问题讨论】:

那么您至少可以链接到该文章并告诉我们它有什么问题。顺便说一句,循环有什么问题? :) 如前所述,“127.0.0.1”是正确答案。它是当前机器的 IP 地址。 @MSalters:我仍然不确定return 127.0.0.1 是否会是我赞成的答案:) @hobodave,也许他只是认为在 *** 上会有一个有用的问题和答案——这里的问题和答案越多,它就越有用,不是吗? @ArielBH,我刚刚搜索了“.net 获取当前机器的 IP 地址”并得到了这个问题。你的评论一点用都没有。 【参考方案1】:
IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName());

您的机器没有单一的 IP 地址,返回的一些地址可能是 IPv6。

MSDN 链接:

Dns.GetHostAddresses IPAddress

或者,正如MSalters 提到的,127.0.0.1 / ::1 是loopback address 并且将始终引用本地计算机。然而,由于显而易见的原因,它不能用于从远程机器连接到本地机器。

【讨论】:

在另一个答案中从@patridge 复制:如果您正在寻找更相关的 IP 地址,您可能希望使用类似这样的内容排除环回 IP(例如,127.0.0.1 和 ::1) : .Where(ip => !Net.IPAddress.IsLoopback(ip))【参考方案2】:

我想要的答案是

string ipAddress = "";
if (Dns.GetHostAddresses(Dns.GetHostName()).Length > 0)

     ipAddress = Dns.GetHostAddresses(Dns.GetHostName())[0].ToString();

【讨论】:

这是执行GetHostAddressesGetHostName两次;您应该将 GetHostAddresses 的结果分配给一个变量,然后检查 Length 如果您正在寻找更相关的 IP 地址,您可能希望使用以下内容排除环回 IP(例如 127.0.0.1 和 ::1):.Where(ip => !Net.IPAddress.IsLoopback(ip))【参考方案3】:
 IPHostEntry ip = DNS.GetHostByName (strHostName);
 IPAddress [] IPaddr = ip.AddressList;

 for (int i = 0; i < IPaddr.Length; i++)
 
  Console.WriteLine ("IP Address 0: 1 ", i, IPaddr[i].ToString ());
 

【讨论】:

GetHostByName 已弃用 - msdn.microsoft.com/en-us/library/…【参考方案4】:
 string hostName = Dns.GetHostName(); // Retrive the Name of HOST

           // Get the IP
            string myIP = Dns.GetHostByName(hostName).AddressList[0].ToString();

//使用以下命名空间- 使用 System.Net;

【讨论】:

以上是关于如何在C#中获取机器的IP地址的主要内容,如果未能解决你的问题,请参考以下文章

C# - 连接到 (RAS) *** 时如何获取 IP 地址

如何在 C# 代码中获取 IP 地址 [重复]

如何在C#中获取用户的公共IP地址

获取机器公网IP

如何获取(Linux)机器的 IP 地址?

如何根据IP地址获取用户机器的准确经纬度