从Dns.GetHostEntry()获取IPv4地址

zom*_*bat 50 .net c# dns ipv4 ipv6

我在这里有一些代码在IPv4机器上运行良好,但在我们的构建服务器(IPv6)上它失败了.简而言之:

IPHostEntry ipHostEntry = Dns.GetHostEntry(string.Empty);
Run Code Online (Sandbox Code Playgroud)

GetHostEntry的文档说,传入string.Empty将获得localhost的IPv4地址.这就是我要的.问题是它在我们的IPv6机器上返回字符串":: 1:",我认为这是IPv6地址.

从任何其他IPv4机器ping机器可以提供良好的IPv4地址......并且从自身执行"ping -4 machinename"会给出正确的IPv4地址....但是从它自身定期ping它会产生":: 1:".

如何从本身获取此机器的IPv4?

Rem*_*anu 64

您是否查看了返回中的所有地址,丢弃了InterNetworkV6系列并仅保留IPv4的地址?


Gar*_*ary 44

要查找所有本地IPv4地址:

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

或使用Array.FindArray.FindLast如果你只想要一个.


Mil*_*vec 9

IPHostEntry ipHostInfo = Dns.GetHostEntry(serverName);
IPAddress ipAddress = ipHostInfo.AddressList
    .FirstOrDefault(a => a.AddressFamily == AddressFamily.InterNetwork);
Run Code Online (Sandbox Code Playgroud)


小智 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();
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

在公共变量中声明myIP和myHost并在表单的任何函数中使用.