2009-06-29 6 views
44

IPv4マシンでうまくいくいくつかのコードがありますが、私たちのビルドサーバー(IPv6)では失敗します。一言で言えば:Dns.GetHostEntry()からIPv4アドレスを取得

IPHostEntry ipHostEntry = Dns.GetHostEntry(string.Empty); 

GetHostEntryのドキュメントはString.Emptyの中で渡すと、あなたのローカルホストのIPv4アドレスを取得することを言います。これは私が欲しいものです。問題は、私たちのIPv6マシン上の文字列 ":: 1:"を返していることです。これはIPv6アドレスだと思います。

他のIPv4マシンからマシンにpingを実行すると、良いIPv4アドレスが得られます... "ping -4 machinename"自体が正しいIPv4アドレスを与えます....しかし、それ自体から定期的にpingを実行すると、 :: 1: "

このマシンのIPv4はどのようにして取得できますか?

答えて

60

返品ではall the addressesを見たことがありますか?family InterNetworkV6のものを捨て、IPv4のものだけを残していますか?

+1

えーえ...コースの。電球の瞬間。ありがとう! – zombat

+1

+1:ありがとうございます - 私はこの同じ質問をしようとしていました:) –

+0

私の呼び出しはipv6、no ipv4 entriesだけを返しています。 PowerShellで 'Resolve-DnsName -Type A'を実行すると、IPv4が返されます(この場合はAAAAというデフォルトの型に戻ります)。 – kamranicus

6
public Form1() 
    { 
     InitializeComponent(); 

     string myHost = System.Net.Dns.GetHostName(); 
     string myIP = null; 

     for (int i = 0; i <= System.Net.Dns.GetHostEntry(myHost).AddressList.Length - 1; i++) 
     { 
      if (System.Net.Dns.GetHostEntry(myHost).AddressList[i].IsIPv6LinkLocal == false) 
      { 
       myIP = System.Net.Dns.GetHostEntry(myHost).AddressList[i].ToString(); 
      } 
     } 
    } 

パブリック変数 にMYIPとMYHOSTを宣言し、フォームの任意の関数で使用します。

39

すべてのローカルIPv4アドレスを見つけるには:

IPAddress[] ipv4Addresses = Array.FindAll(
    Dns.GetHostEntry(string.Empty).AddressList, 
    a => a.AddressFamily == AddressFamily.InterNetwork); 

またはあなただけの1をしたい場合はArray.FindまたはArray.FindLastを使用します。

+6

linqを使用して+1 – Nahum

+1

@NahumLitvinしかし、これはlinqではないのですか? – Lukazoid

+0

@lukazoid itaではありません。私はラムダ式 – Nahum

0

これは私が

public static IEnumerable<string> GetAddresses() 
{ 
     var host = Dns.GetHostEntry(Dns.GetHostName()); 
     return (from ip in host.AddressList where ip.AddressFamily == AddressFamily.lo select ip.ToString()).ToList(); 
} 
2
public static string GetIPAddress(string hostname) 
    { 
     IPHostEntry host; 
     host = Dns.GetHostEntry(hostname); 

     foreach (IPAddress ip in host.AddressList) 
     { 
      if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) 
      { 
       //System.Diagnostics.Debug.WriteLine("LocalIPadress: " + ip); 
       return ip.ToString(); 
      } 
     } 
     return string.Empty; 
    } 
-1

IPv6の

lblIP.Text = System.Net.Dns.GetHostEntry(System.Netを使用しているコードで、すべての有効なアドレスのリストを見つけることができます。 Dns.GetHostName).AddressList(0).ToString()


のIPv4

lblIP.Text = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName).AddressList(1).ToString()

+0

を意味するかもしれません。System.Net.Dns.GetHostNameはメソッドであり、プロパティではありません。 – RenniePet

5
IPHostEntry ipHostInfo = Dns.GetHostEntry(serverName); 
IPAddress ipAddress = ipHostInfo.AddressList 
    .FirstOrDefault(a => a.AddressFamily == AddressFamily.InterNetwork); 
関連する問題