In this task I had to create simple IP address / subnet calculator in Python. I'm just wondering how you see this problem.
There is my code:
def toBinary(integer):
binary = ['{0:0>8}'.format(bin(int(x))[2:]) for x in integer.split(".")]
return binary
def ip_information(ip, mask):
binary_ip = toBinary(ip)
binary_mask = toBinary(mask)
network_ip = ["", "", "", ""]
broadcast_address = ["", "", "", ""]
number_of_hosts = 1
for x in range(4):
for y in range(8):
network_ip[x] += str(int(binary_ip[x][y]) and int(binary_mask[x][y]))
broadcast_address[x] += str(int(not int(binary_mask[x][y])))
if binary_mask[x][y] == '0':
number_of_hosts *= 2
network_ip[x] = int(network_ip[x], 2)
broadcast_address[x] = int(broadcast_address[x], 2) + network_ip[x]
return f"""
Network IP: {".".join(str(x) for x in network_ip)}
Broadcast address: {".".join(str(x) for x in broadcast_address)}
Number of hosts: {number_of_hosts - 2}
"""
Output:
Network IP: 192.168.0.0
Broadcast address: 192.168.0.255
Number of hosts: 254
Any tips on how to make this better, closer to an advanced (but still, can take under account to make it simple)? Or just a better solution will be definitely on point.
Using Python 3.10.
ipaddress
? \$\endgroup\$ip_information('172.23.45.67', 31)
should return a network of 172.23.45.66 (or no network at all, depending on how you define it), a broadcast of 172.23.45.67 (or no broadcast at all, depending on how you define it), and 2 hosts. \$\endgroup\$