Skip to content

Instantly share code, notes, and snippets.

@networkextension
Created October 29, 2022 03:50
Show Gist options
  • Save networkextension/299929c06ead16dd4a9fcad6a4e9f398 to your computer and use it in GitHub Desktop.
Save networkextension/299929c06ead16dd4a9fcad6a4e9f398 to your computer and use it in GitHub Desktop.
find ip in ip cidr
func ipv4_StringToInt(_ value: String) -> UInt32? {
var addr = in_addr()
return inet_aton(value.cString(using: .ascii), &addr) != 0
? UInt32(addr.s_addr)
: nil
}
func ipv4_IntToString(_ value: UInt32) -> String {
let addr = in_addr(s_addr: value)
return String(cString:inet_ntoa(addr))
}
public func findIPS(cidrs:[String],iplist:[String]) ->[String]{
var result:[String] = []
iplist.forEach { ip in
//192.168.1.0/24
if let raddr = ipv4_StringToInt(ip) {
for cidr in cidrs {
let items = cidr.components(separatedBy: "/")
if items.count == 2 {
let r = items[0]
let bits = Float(items[1])!
if let minaddr = ipv4_StringToInt(r) {
let sw = raddr.byteSwapped
let min = minaddr.byteSwapped
let mask = UInt32((pow(2, 32 - bits ) - 1 ))
let maxaddr = min | mask
if sw > min && sw < maxaddr {
result.append(ip)
break
}
}
}
}
}
// if ip ==
}
return result
}
let r = findIPS(cidrs: ["192.168.110.0/24"], iplist: ["192.168.110.10","192.168.100.10"])
print(r)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment