【问题标题】:Get IP address through c# (in IPv4 value) [duplicate]通过c#获取IP地址(在IPv4值中)[重复]
【发布时间】:2012-08-09 09:22:17
【问题描述】:

可能重复:
Get IPv4 addresses from Dns.GetHostEntry()

我尝试使用以下代码获取我的 IP 地址,在 XP 中,它返回 IP 地址 V4 格式, 但是当我在我的系统(Windows 7)中执行此操作时,它会以 v6 格式返回 IP 地址。

如何解决?

代码

try
{
      //iphostname = Dns.GetHostName();  // Resolving Host name
      IPHostEntry ipentry = Dns.GetHostEntry(hostLabel.Text);
      IPAddress[] addr = ipentry.AddressList;// Resolving IP Addresses
      for (int i = 0; i < addr.Length; i++)
      {
           try
           {
               ipLabel.Text = Convert.ToString(addr[i]) + "\r\n";
           }
           catch
           {
               ipLabel.Text += "IP Address            | " + "\r\n";
           }
      }
}
catch
{
     //richTextBox1.Text += "Hostname             | " + "\r\n";
}

【问题讨论】:

  • “IP 地址”不存在 - 一台机器可以有多个 IP 地址。 v6 和 v4 地址不是同一事物的两种表示形式 - v6 地址与 v4 地址是分开的。

标签: c# networking ip


【解决方案1】:
try
           {
               ipLabel.Text += Convert.ToString(addr[i]) + ";";
           }

由于在 Windows 7 中启用了 IPv6,它将返回 IPv4 和 IPv6,并且您的循环正在删除一些值。

【讨论】:

    【解决方案2】:

    试试这个,

     string strHostName = "";
     strHostName = System.Net.Dns.GetHostName();
     IPHostEntry ipEntry = System.Net.Dns.GetHostEntry(strHostName);
     IPAddress[] addr = ipEntry.AddressList;
     ipLabel.Text = addr[addr.Length - 2].ToString();
    

    【讨论】:

    • 是的..它正在工作..,所以魔法是在长度后面加上“-2”? =)
    • 这对我很有用,谢谢
    • IPv4地址在AddressList的第二个索引处,AddressList的长度是4。所以AddressList[4 - 2]=AddressList[2]
    猜你喜欢
    • 2016-03-27
    • 2011-05-07
    • 2020-12-19
    • 2017-03-09
    • 2014-05-23
    • 2020-06-10
    • 2020-12-28
    • 2012-06-16
    相关资源
    最近更新 更多