Description: A function that receives two IPv4 addresses, and returns the number of addresses between them (including the first one, excluding the last one).
NOTE: Its considered that all inputs will be valid IPv4 addresses in the form of strings. The last address will always be greater than the first one.
fn ips_between(start: &str, end: &str) -> u32 {
// Convert ips to decimal
let start_ip_split_vec = start.split('.')
.map(|oct| oct.parse::().unwrap())
.collect::>();
let end_ip_split_vec = end.split('.')
.map(|oct| oct.parse::().unwrap())
.collect::>();
let start_ip_decimal = (start_ip_split_vec[0] << 24)
+ (start_ip_split_vec[1] << 16)
+ (start_ip_split_vec[2] << 8)
+ (start_ip_split_vec[3]);
let end_ip_decimal = (end_ip_split_vec[0] << 24)
+ (end_ip_split_vec[1] << 16)
+ (end_ip_split_vec[2] << 8)
+ (end_ip_split_vec[3]);
end_ip_decimal - start_ip_decimal
} Examples: ips_between("10.0.0.0", "10.0.0.50") == 50
ips_between("10.0.0.0", "10.0.1.0") == 256
ips_between("20.0.0.10", "20.0.1.0") == 246