2012-08-09 60 views
1

可能重複:
Get IPv4 addresses from Dns.GetHostEntry()獲得通過C#IP地址(IPv4中值)

我嘗試下面的代碼,讓我的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"; 
} 
+0

嘗試尋找這裏:http://stackoverflow.com/questions/1059526/get-ipv4-addresses-from-dns-gethostentry – 2012-08-09 09:27:21

+0

「IP地址」 不存在 - 一臺機器可以有多個IP地址。 v6和v4地址不是同一件事的兩種表示--v6地址與v4地址是分開的。 – 2012-08-09 09:30:00

回答

1

試試這個,

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(); 
+0

是的,它正在工作..,所以魔法是增加「-2」的長度後面? =) – houstonCYap 2012-08-10 09:50:50

+0

這對我很好,謝謝 – hyperexpert 2013-09-02 09:44:14

+0

IPv4地址在AddressList的第二個索引處,AddressList的長度是4.所以'AddressList [4-2]'='AddressList [2]'。 – akinuri 2015-09-12 15:29:23

3
try 
      { 
       ipLabel.Text += Convert.ToString(addr[i]) + ";"; 
      } 

由於IPv6的Windows 7中啓用它會返回IPv4和IPv6,你的循環擦除幾個值。