public static IPAddress[] GetHostAddresses(string hostNameOrAddress) { if (NetEventSource.IsEnabled) { NetEventSource.Enter(hostNameOrAddress, hostNameOrAddress); } NameResolutionPal.EnsureSocketsAreInitialized(); if (hostNameOrAddress is null) { throw new ArgumentNullException(nameof(hostNameOrAddress)); } // See if it's an IP Address. IPAddress[] addresses; if (IPAddress.TryParse(hostNameOrAddress, out IPAddress address)) { if (address.Equals(IPAddress.Any) || address.Equals(IPAddress.IPv6Any)) { if (NetEventSource.IsEnabled) { NetEventSource.Error(address, $"Invalid address '{address}'"); } throw new ArgumentException(SR.Format(SR.net_invalid_ip_addr, nameof(hostNameOrAddress))); } addresses = new IPAddress[] { address }; } else { addresses = GetHostAddressesCore(hostNameOrAddress); } if (NetEventSource.IsEnabled) { NetEventSource.Exit(hostNameOrAddress, addresses); } return(addresses); }
} // GetHostEntry public static IPAddress[] GetHostAddresses(string hostNameOrAddress) { if (NetEventSource.IsEnabled) { NetEventSource.Enter(null, hostNameOrAddress); } NameResolutionPal.EnsureSocketsAreInitialized(); if (hostNameOrAddress == null) { throw new ArgumentNullException(nameof(hostNameOrAddress)); } // See if it's an IP Address. IPAddress address; IPAddress[] addresses; if (IPAddress.TryParse(hostNameOrAddress, out address)) { if (address.Equals(IPAddress.Any) || address.Equals(IPAddress.IPv6Any)) { throw new ArgumentException(SR.Format(SR.net_invalid_ip_addr, nameof(hostNameOrAddress))); } addresses = new IPAddress[] { address }; } else { // InternalGetHostByName works with IP addresses (and avoids a reverse-lookup), but we need // explicit handling in order to do the ArgumentException and guarantee the behavior. addresses = InternalGetHostByName(hostNameOrAddress).AddressList; } if (NetEventSource.IsEnabled) { NetEventSource.Exit(null, addresses); } return(addresses); }
} // EndGetHostByName() public static IPHostEntry GetHostEntry(string hostNameOrAddress) { if (NetEventSource.Log.IsEnabled()) { NetEventSource.Enter(NetEventSource.ComponentType.Socket, "DNS", "GetHostEntry", hostNameOrAddress); } NameResolutionPal.EnsureSocketsAreInitialized(); if (hostNameOrAddress == null) { throw new ArgumentNullException(nameof(hostNameOrAddress)); } // See if it's an IP Address. IPAddress address; IPHostEntry ipHostEntry; if (IPAddress.TryParse(hostNameOrAddress, out address)) { if (address.Equals(IPAddress.Any) || address.Equals(IPAddress.IPv6Any)) { throw new ArgumentException(SR.Format(SR.net_invalid_ip_addr, nameof(hostNameOrAddress))); } ipHostEntry = InternalGetHostByAddress(address, true); } else { ipHostEntry = InternalGetHostByName(hostNameOrAddress, true); } if (NetEventSource.Log.IsEnabled()) { NetEventSource.Exit(NetEventSource.ComponentType.Socket, "DNS", "GetHostEntry", ipHostEntry); } return(ipHostEntry); }
public static IPHostEntry GetHostEntry(string hostNameOrAddress) { NameResolutionPal.EnsureSocketsAreInitialized(); if (hostNameOrAddress is null) { throw new ArgumentNullException(nameof(hostNameOrAddress)); } // See if it's an IP Address. IPHostEntry ipHostEntry; if (IPAddress.TryParse(hostNameOrAddress, out IPAddress? address)) { if (address.Equals(IPAddress.Any) || address.Equals(IPAddress.IPv6Any)) { if (NetEventSource.Log.IsEnabled()) { NetEventSource.Error(address, $"Invalid address '{address}'"); } throw new ArgumentException(SR.Format(SR.net_invalid_ip_addr, nameof(hostNameOrAddress))); } ipHostEntry = GetHostEntryCore(address); } else { ipHostEntry = GetHostEntryCore(hostNameOrAddress); } if (NetEventSource.Log.IsEnabled()) { NetEventSource.Info(hostNameOrAddress, $"{ipHostEntry} with {ipHostEntry.AddressList.Length} entries"); } return(ipHostEntry); }
public static IPHostEntry GetHostEntry(string hostNameOrAddress) { if (NetEventSource.IsEnabled) { NetEventSource.Enter(null, hostNameOrAddress); } NameResolutionPal.EnsureSocketsAreInitialized(); if (hostNameOrAddress is null) { throw new ArgumentNullException(nameof(hostNameOrAddress)); } // See if it's an IP Address. IPHostEntry ipHostEntry; if (IPAddress.TryParse(hostNameOrAddress, out IPAddress address)) { if (address.Equals(IPAddress.Any) || address.Equals(IPAddress.IPv6Any)) { throw new ArgumentException(SR.Format(SR.net_invalid_ip_addr, nameof(hostNameOrAddress))); } ipHostEntry = GetHostEntryCore(address); } else { ipHostEntry = GetHostEntryCore(hostNameOrAddress); } if (NetEventSource.IsEnabled) { NetEventSource.Exit(null, ipHostEntry); } return(ipHostEntry); }
internal static IPHostEntry InternalGetHostByName(string hostName, bool includeIPv6) { if (NetEventSource.Log.IsEnabled()) { NetEventSource.Enter(NetEventSource.ComponentType.Socket, "DNS", "GetHostByName", hostName); } IPHostEntry ipHostEntry = null; if (GlobalLog.IsEnabled) { GlobalLog.Print("Dns.GetHostByName: " + hostName); } NameResolutionPal.EnsureSocketsAreInitialized(); if (hostName.Length > MaxHostName || // If 255 chars, the last one must be a dot. hostName.Length == MaxHostName && hostName[MaxHostName - 1] != '.') { throw new ArgumentOutOfRangeException(nameof(hostName), SR.Format(SR.net_toolong, "hostName", MaxHostName.ToString(NumberFormatInfo.CurrentInfo))); } // // IPv6 Changes: IPv6 requires the use of getaddrinfo() rather // than the traditional IPv4 gethostbyaddr() / gethostbyname(). // getaddrinfo() is also protocol independent in that it will also // resolve IPv4 names / addresses. As a result, it is the preferred // resolution mechanism on platforms that support it (Windows 5.1+). // If getaddrinfo() is unsupported, IPv6 resolution does not work. // // Consider : If IPv6 is disabled, we could detect IPv6 addresses // and throw an unsupported platform exception. // // Note : Whilst getaddrinfo is available on WinXP+, we only // use it if IPv6 is enabled (platform is part of that // decision). This is done to minimize the number of // possible tests that are needed. // if (includeIPv6 || SocketProtocolSupportPal.OSSupportsIPv6) { // // IPv6 enabled: use getaddrinfo() to obtain DNS information. // int nativeErrorCode; SocketError errorCode = NameResolutionPal.TryGetAddrInfo(hostName, out ipHostEntry, out nativeErrorCode); if (errorCode != SocketError.Success) { throw new InternalSocketException(errorCode, nativeErrorCode); } } else { ipHostEntry = NameResolutionPal.GetHostByName(hostName); } if (NetEventSource.Log.IsEnabled()) { NetEventSource.Exit(NetEventSource.ComponentType.Socket, "DNS", "GetHostByName", ipHostEntry); } return(ipHostEntry); } // GetHostByName