public static IEnumerable <IPAddress> GetRouteDnsAddress() { var networkInterfaces = NetworkInterface.GetAllNetworkInterfaces(); return(from networkInterface in networkInterfaces where IsWorkedInterface(networkInterface) select networkInterface.GetIPProperties() into ipProperties from dns in ipProperties.GatewayAddresses where IPFormatter.IsIPv4Address(dns.Address) select dns.Address); }
/// <summary> /// /// </summary> /// <param name="ipAddress"></param> /// <remarks>A null or empty string passed as the ipAddress will return true. An invalid ipAddress will be returned as true.</remarks> /// <returns></returns> public static bool IsNonRoutableIpAddress(string ipAddress) { //Reference: http://en.wikipedia.org/wiki/Reserved_IP_addresses //if the ip address string is empty or null string, we consider it to be non-routable if (string.IsNullOrEmpty(ipAddress)) { return(true); } if (!IPAddress.TryParse(ipAddress, out var tempIpAddress)) { return(true); } var ipAddressBytes = tempIpAddress.GetAddressBytes(); if (IPFormatter.IsIPv4Address(tempIpAddress)) { if (IsIpAddressInRange(ipAddressBytes, @"10.0.0.0/8")) //Class A Private network check { return(true); } if (IsIpAddressInRange(ipAddressBytes, @"172.16.0.0/12")) //Class B private network check { return(true); } if (IsIpAddressInRange(ipAddressBytes, @"192.168.0.0/16")) //Class C private network check { return(true); } if (IsIpAddressInRange(ipAddressBytes, @"127.0.0.0/8")) //Loopback { return(true); } if (IsIpAddressInRange(ipAddressBytes, @"0.0.0.0/8")) //reserved for broadcast messages { return(true); } return(false); } //if ipAddress is IPv6 if (IPFormatter.IsIPv6Address(tempIpAddress)) { if (IsIpAddressInRange(ipAddressBytes, @"::/128")) //Unspecified address { return(true); } if (IsIpAddressInRange(ipAddressBytes, @"::1/128")) //Loopback address for localhost { return(true); } if (IsIpAddressInRange(ipAddressBytes, @"2001:db8::/32")) //Addresses used in documentation { return(true); } throw new NotImplementedException(); return(false); } return(true); }
private static bool IsIpAddressInRange(byte[] ipAddressBytes, string reservedIpAddress) { if (string.IsNullOrEmpty(reservedIpAddress)) { return(false); } if (ipAddressBytes == null) { return(false); } //Split the reserved ip address into a bitmask and ip address var ipAddressSplit = reservedIpAddress.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries); if (ipAddressSplit.Length != 2) { return(false); } var ipAddressRange = ipAddressSplit[0]; if (!IPAddress.TryParse(ipAddressRange, out var ipAddress)) { return(false); } // Convert the IP address to bytes. var ipBytes = ipAddress.GetAddressBytes(); //parse the bits if (!int.TryParse(ipAddressSplit[1], out var bits)) { bits = 0; } // BitConverter gives bytes in opposite order to GetAddressBytes(). byte[] maskBytes = null; if (IPFormatter.IsIPv4Address(ipAddress)) { var mask = ~(uint.MaxValue >> bits); maskBytes = BitConverter.GetBytes(mask).Reverse().ToArray(); } else if (IPFormatter.IsIPv6Address(ipAddress)) { //128 places var bitArray = new BitArray(128, false); //shift <bits> times to the right ShiftRight(bitArray, bits, true); //turn into byte array maskBytes = ConvertToByteArray(bitArray).Reverse().ToArray(); } var result = true; //Calculate for (var i = 0; i < ipBytes.Length; ++i) { result &= (byte)(ipAddressBytes[i] & maskBytes[i]) == ipBytes[i]; } return(result); }
public DnsQuery() : this(IPFormatter.ToIPEndPoints(GetLocalDnsAddress(), 53)) { }
public string Ptr(string queryStr) { return(QueryString(IPFormatter.IPStr2PTRName(queryStr), Types.PTR)); }