web-dev-qa-db-ja.com

Dns.GetHostEntry()からIPv4アドレスを取得します

ここには、IPv4マシンでうまく機能するコードがいくつかありますが、ビルドサーバー(IPv6)では失敗します。一言で言えば:

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

GetHostEntryのドキュメントには、string.Emptyを渡すと、localhostのIPv4アドレスが取得されると書かれています。これは私が欲しいものです。問題は、IPv6マシンで文字列「:: 1:」を返すことです。これはIPv6アドレスだと思います。

他のIPv4マシンからマシンにpingを実行すると、良好なIPv4アドレスが得られます。.."ping -4 machinename"を実行すると、正しいIPv4アドレスが得られます。 「:: 1:」。

このマシンのIPv4をそれ自体から取得するにはどうすればよいですか?

49
zombat

すべてのアドレス を見て、 family InterNetworkV6 を破棄し、IPv4のみを保持しましたか?

64
Remus Rusanu

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

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

または、必要な場合はArray.FindまたはArray.FindLastを使用します。

44
Gary
IPHostEntry ipHostInfo = Dns.GetHostEntry(serverName);
IPAddress ipAddress = ipHostInfo.AddressList
    .FirstOrDefault(a => a.AddressFamily == AddressFamily.InterNetwork);
9
Milan Švec
    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();
            }
        }
    }

Public変数でmyIPとmyHostを宣言し、フォームの任意の関数で使用します。

6
Naveen Desosha
    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;
    }
2

すべての有効なアドレス一覧を見つけるには、これが使用したコードです

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();
}
0
Ravi Shankar