netcore 获取本地网络IP地址

。net framework 下面可以用下面的代码获取到本地网络ip地址。netcore下面这个代码也依然可以用

System.Net.Dns.GetHostName()
System.Net.Dns.GetHostEntry(hostName)

But,偶然的一次线上日志查看,发现获取到的IP全都是127.0.0.1。虽然本地windows测试上面的代码好使,本地测试环境centos7也好使。就是线上部分机器有问题,
遂写了个demo程序放产线上跑了一下,发现GetHostEntry里面只有一张网卡的信息,即本地回环的那个(lo);

后,经过伟大的google教训:找到https://github.com/dotnet/corefx/issues/8458,遂恍然大悟,应该这样写:

System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()
  .Select(p => p.GetIPProperties())
  .SelectMany(p => p.UnicastAddresses)
  .Where(p => p.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork && !System.Net.IPAddress.IsLoopback(p.Address))
  .FirstOrDefault()?.Address.ToString();

参考:https://github.com/dotnet/corefx/issues/8458

posted @ 2018-01-08 22:08  czd890  阅读(1283)  评论(1编辑  收藏  举报