我尝试在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。
答案 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;
});