One or more errors occurred. (Not a local IP address. (Parameter ‘address’))
在Ubuntu中,.NET Core使用WebSocketCore,用dotnet驱动时抛出这个错误
One or more errors occurred. (Not a local IP address. (Parameter 'address'))
解决办法
hostname ## 查看主机名称
ip addr ## 查看本机IP
vim /etc/hosts # 找到主机所在行 将127.0.1.1 改为 本机ip
原因
WebSocketCore中判断IP是否为本地IP,而判断逻辑是判断0.0.0.0
、127.0.0.1
以及HostAddresses
。
判断HostAddresses使用的是类System.Net.Dns
,先获取主机名称再根据主机名称获取主机地址。而Ubuntu中映射主机IP在**/etc/hosts**文件中。
WebSocketCore源码
public WebSocketServer (System.Net.IPAddress address, int port, bool secure)
{
//...
if (!address.IsLocal ())
throw new ArgumentException ("Not a local IP address.", "address");
//...
}
public static bool IsLocal (this System.Net.IPAddress address)
{
if (address == null)
throw new ArgumentNullException ("address");
if (address.Equals (System.Net.IPAddress.Any))
return true;
if (address.Equals (System.Net.IPAddress.Loopback))
return true;
if (Socket.OSSupportsIPv6) {
if (address.Equals (System.Net.IPAddress.IPv6Any))
return true;
if (address.Equals (System.Net.IPAddress.IPv6Loopback))
return true;
}
var host = System.Net.Dns.GetHostName ();
var addrs = System.Net.Dns.GetHostAddresses (host);
foreach (var addr in addrs) {
if (address.Equals (addr))
return true;
}