如何找到网络ID

问题描述

我想使用ipaddress和子网掩码之间的按位运算找到网络ID。我想使用这种传统方法,示例代码在这里

hostname=input("Enter the IP Address: ")
print(hostname)
if hostname >= "0.0.0.0" and hostname <= "127.255.255.255":
    print("Class A")
    print("The default subnet mask is: 255.0.0.0")
    j=(hostname & 255.0.0.0)
    print("The network id is ",j)

解决方法

由于要进行输入,请始终确保对输入内容进行消毒。 使用ipaddress.ip_interface()ipaddress.ip_network()来确保输入的输入是有效的IP。

您的输入hostname也是一个字符串,因此按位运算将失败。

使用ipaddresss.ip_address(hostname)后,您将获得一个IPv4Address对象,该对象将允许您检查众多属性。

ipaddress标准软件包中还有其他帮助程序函数,用于获取CIDR值并创建IPvXNetwork对象,也许这正是您所需要的,请检查ipaddress HOW-TO

大致如下:

import ipaddress

try:
    inp = input("Enter the IP Address: ")
    iface = ipaddress.ip_interface(inp)
except ValueError as e:
    # crude way of handling and printing errors
    # there are elegant ways to handle and proceed
    print(e)
    exit(1)
else:
    netword_id = iface.network
    hostname = iface.ip

注意:我对原始答案进行了一些编辑,您可能想使用ipaddress.ip_interface()

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...