public IEnumerable <IPAddressRange> EnumerateIPAddresses(string ruleNamePrefix = null) { lock (this) { ruleNamePrefix = ScrubRuleNamePrefix(ruleNamePrefix); if (ruleNamePrefix.StartsWith(RulePrefix + "0", StringComparison.OrdinalIgnoreCase)) { foreach (uint ip in blockedIPAddressesV4) { yield return(new IPAddressRange(ip.ToIPAddress())); } foreach (UInt128 ip in blockedIPAddressesV6) { yield return(new IPAddressRange(ip.ToIPAddress())); } } if (ruleNamePrefix.StartsWith(RulePrefix + "1", StringComparison.OrdinalIgnoreCase)) { foreach (uint ip in allowedIPAddressesV4) { yield return(new IPAddressRange(ip.ToIPAddress())); } foreach (UInt128 ip in allowedIPAddressesV6) { yield return(new IPAddressRange(ip.ToIPAddress())); } } foreach (string key in blockRules.Keys.Where(k => k.StartsWith(ruleNamePrefix, StringComparison.OrdinalIgnoreCase))) { BlockRule rule = blockRules[key]; foreach (IPAddressRange range in rule.EnumerateIPAddresses()) { yield return(range); } } } }