{"record":{"id":"9118a480a0f36f04","repo":"TechnitiumSoftware/DnsServer","slug":"the-address-must-be-an-ipv4-address-ip","errorCode":null,"errorMessage":"The address must be an IPv4 address: {ip}","messagePattern":"The address must be an IPv4 address: (.+?)","errorType":"validation","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"DnsServerCore/Dhcp/Scope.cs","lineNumber":456,"sourceCode":"        }\n\n        private static bool IsAddressInRange(IPAddress address, IPAddress startingAddress, IPAddress endingAddress)\n        {\n            uint addressNumber = address.ConvertIpToNumber();\n            uint startingAddressNumber = startingAddress.ConvertIpToNumber();\n            uint endingAddressNumber = endingAddress.ConvertIpToNumber();\n\n            return (startingAddressNumber <= addressNumber) && (addressNumber <= endingAddressNumber);\n        }\n\n        private static void ValidateIpv4(IReadOnlyCollection<IPAddress> value, string paramName)\n        {\n            if (value is not null)\n            {\n                foreach (IPAddress ip in value)\n                {\n                    if (ip.AddressFamily != AddressFamily.InterNetwork)\n                        throw new ArgumentException(\"The address must be an IPv4 address: \" + ip.ToString(), paramName);\n                }\n            }\n        }\n\n        private static void ValidateIpv4(IPAddress value, string paramName)\n        {\n            if ((value is not null) && (value.AddressFamily != AddressFamily.InterNetwork))\n                throw new ArgumentException(\"The address must be an IPv4 address: \" + value.ToString(), paramName);\n        }\n\n        #endregion\n\n        #region private\n\n        private async Task<AddressStatus> IsAddressAvailableAsync(IPAddress address)\n        {\n            if (address.Equals(_routerAddress))\n                return AddressStatus.FALSE;","sourceCodeStart":438,"sourceCodeEnd":474,"githubUrl":"https://github.com/TechnitiumSoftware/DnsServer/blob/d0484b6c1e7439cdc53d67d81e9c876cda2ad756/DnsServerCore/Dhcp/Scope.cs#L438-L474","documentation":"ValidateIpv4 (collection overload) checks every IPAddress in a collection is IPv4 (AddressFamily == InterNetwork). Any IPv6 or other family member triggers ArgumentException with the offending IP and paramName.","triggerScenarios":"Setting an IPv4-only scope property (e.g. DNS servers / gateways list) with a collection containing an IPAddress whose AddressFamily != InterNetwork.","commonSituations":"Mixing IPv6 addresses (e.g. '::1' or link-local fe80::) into an IPv4-only DHCP scope config. Auto-detecting system resolvers and passing an IPv6 one. Resolving a hostname to IPv6.","solutions":["Filter the collection to IPv4 only before assigning (where(a => a.AddressFamily == InterNetwork)).","Remove IPv6 entries from the scope's DNS server / gateway / exclusions lists.","Use a dedicated IPv6 scope type if IPv6 DHCP is needed."],"exampleFix":"// before\nscope.DnsServers = System.Net.Dns.GetHostAddresses('resolver'); // may include IPv6\n// after\nscope.DnsServers = System.Net.Dns.GetHostAddresses('resolver')\n    .Where(a => a.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork).ToList();","handlingStrategy":"validation","validationCode":"if (addresses.Any(a => a.AddressFamily != AddressFamily.InterNetwork))\n    throw new ArgumentException(\"Only IPv4 addresses are allowed\", nameof(addresses));","typeGuard":"static bool AllIPv4(IEnumerable<IPAddress> ips) => ips == null || ips.All(a => a.AddressFamily == AddressFamily.InterNetwork);","tryCatchPattern":"try { scope.DnsServers = list; }\ncatch (ArgumentException ex) when (ex.Message.Contains(\"IPv4\"))\n{ /* filter list to IPv4, retry */ }","preventionTips":["Filter resolver/interface lists to InterNetwork before assigning.","Keep IPv6 configuration out of IPv4-only scopes.","Validate at the config-import boundary."],"tags":["dhcp","ipv4","validation","networking"],"backgroundTag":null,"analyzedSha":"d0484b6c1e7439cdc53d67d81e9c876cda2ad756","analyzedAt":"2026-08-13T22:57:35.508Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}