为什么IP地址返回值127.0.0.1?

时间:2019-05-17 10:39:02

标签: c#

我尝试在ipconfig上输入cmd.exe,并且IP地址= "172.24.70.68"

但是,如果我获得此PC的IP,它将返回IP:127.0.0.1

我的代码获得IP地址:

           IPAddress ip = null;
            IPAddress mask = null;
            //++**********************************
            // Get IP
            //--**********************************
            strHostName = Dns.GetHostName();
            IPHostEntry iphe = Dns.GetHostEntry(strHostName);
            foreach (IPAddress ipheal in iphe.AddressList)
            {
                if (ipheal.AddressFamily ==AddressFamily.InterNetwork)
                {
                    ip = ipheal;
                    break;
                }
            }

为什么IP地址返回值127.0.0.1?

其他一些PC,可以获取IP。

enter image description here

2 个答案:

答案 0 :(得分:1)

请尝试不要通过DNS获取地址,这可能是欺骗性的,或者如果例如没有计算机的DNS记录,则根本无法正常工作,而是通过适配器设置(实际上与ipconfig相同)进行。

您可以使用NetworkInterface.GetAllNetworkInterfaces()获得所有适配器。 NetworkInterfaceType属性使您可以筛选以太网适配器,并排除回送适配器。您也可以仅针对特定状态的适配器进行过滤,例如OperationalStatus属性。

然后,您可以遍历适配器的所有单播地址,并从中选择一个IPv4地址,例如遇到的第一个IPv4地址。当然,如果您在一个适配器上具有更多适配器或地址,则可能仍不是您要查找的适配器。在这种情况下,您需要定义如何识别想要的人并相应地实现它。

IPAddress ip = null;
IPAddress mask = null;

foreach (NetworkInterface networkInterface in NetworkInterface.GetAllNetworkInterfaces())
{
    bool found = false;

    if (networkInterface.NetworkInterfaceType == NetworkInterfaceType.Ethernet
        && networkInterface.OperationalStatus == OperationalStatus.Up
        && networkInterface.NetworkInterfaceType != NetworkInterfaceType.Loopback)
    {
        foreach (UnicastIPAddressInformation unicastIPAddressInformation in networkInterface.GetIPProperties().UnicastAddresses)
        {
            if (unicastIPAddressInformation.Address.AddressFamily == AddressFamily.InterNetwork)
            {
                ip = unicastIPAddressInformation.Address;
                mask = unicastIPAddressInformation.IPv4Mask;
                found = true;
                break;
            }
        }
    }

    if (found)
    {
        break;
    }
}

答案 1 :(得分:0)

您需要使用转发器标题 .net核心示例

  services.Configure<ForwardedHeadersOptions>(options =>
 {
     options.ForwardLimit = 2;
     options.KnownProxies.Add(IPAddress.Parse("127.0.10.1"));
     options.ForwardedForHeaderName = "X-Forwarded-For-My-Custom-Header-Name";
     options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | 
     ForwardedHeaders.XForwardedProto;
 });