#!/usr/bin/env python3
import sys
def format_bit_image(value):
bit_str = format(value, "b").zfill(32)
return " ".join([bit_str[0:8], bit_str[8:16], bit_str[16:24], bit_str[24:32]])
def get_4octets(str):
int_list = [int(x) for x in str.split(".")] # using list comprehension
return int_list[0] << 24 | int_list[1] << 16 | int_list[2] << 8 | int_list[3]
def get_str_expression(value):
p = []
p.append(value >> 24 & 0xFF)
p.append(value >> 16 & 0xFF)
p.append(value >> 8 & 0xFF)
p.append(value & 0xFF)
str_p = [str(x) for x in p]
return ".".join(str_p)
def show_info(label, value):
print(
"%-14s = %d {%s} %s [%s]"
% (label, value, format_bit_image(value), hex(value), get_str_expression(value))
)
if len(sys.argv) != 3:
print("Usage: %s [IP address] [Netmask]" % sys.argv[0])
exit(1)
ip_addr = get_4octets(sys.argv[1])
netmask = get_4octets(sys.argv[2])
show_info("ip_addr", ip_addr)
show_info("netmask", netmask)
network_addr = ip_addr & netmask
show_info("network_addr", network_addr)
broadcast_addr = ip_addr | (~netmask & 0xFFFFFFFF)
show_info("broadcast_addr", broadcast_addr)