# Simple IP address subnet calculator

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

binary_ip = toBinary(ip)
network_ip = ["", "", "", ""]
number_of_hosts = 1

for x in range(4):
for y in range(8):
number_of_hosts *= 2

network_ip[x] = int(network_ip[x], 2)

return f"""
Network IP: {".".join(str(x) for x in network_ip)}
Number of hosts: {number_of_hosts - 2}
"""


Output:

    Network IP: 192.168.0.0
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.

• Are you aware of ipaddress? Commented Jan 12, 2022 at 2:30
• Yes, but I have to make it calculations on my own. Commented Jan 12, 2022 at 15:17
• Your function gives a wrong answer for a 31-bit network prefix, as well as for all IPv6 addresses. For example, 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. Commented Jan 12, 2022 at 20:03

# PEP8

You should use snake_case for function names. You did so with ip_information, why not with to_binary as well?

# Naming

The function name ip_information does not convey what it precisely does. You might want to rename it.

# Docstrings

Both of your functions are excellent candidates for docstrings to describe what they are supposed to be doing.

# Use existing library functions

Since you did not tag reinventing-the-wheel, I suppose that you just want to get the job done. If so, your entire code can be replaced with the usage of the ipaddress module from the standard library:

from ipaddress import IPv4Network

def print_network_information(ipv4network: IPv4Network) -> None:
of addresses on the given IPv4 network.
"""