Python 如何检查它是否是有效的网络掩码?

Python 如何检查它是否是有效的网络掩码?,python,ip,netmask,Python,Ip,Netmask,我的代码必须返回有效的网络掩码。它必须检查二进制表示形式是True还是False def is_valid_netmask(numberlist): ips = numberlist result = True #for ip in ips: #num = int(ip) #if not (num >= 0 and num <= 255): #result = False if len(ips)

我的代码必须返回有效的网络掩码。它必须检查二进制表示形式是
True
还是
False

def is_valid_netmask(numberlist):
    ips = numberlist
    result = True
    #for ip in ips:
        #num = int(ip)
        #if not (num >= 0 and num <= 255):
            #result = False
    if len(ips) != 4:
        return False

    if result == False:
        print("not valid")
    else:
        print("valid")
        octet = ips
        octet_bin = [format(int(i), '08b') for i in octet]
        binary_netmask = ("").join(octet_bin)
        print(binary_netmask)

        checking_ones = True
        for symbol in binary_netmask:
            print("the current symbol is ", symbol)
            print(f"I only encountered one so far: {checking_ones}")
            if checking_ones and symbol == "0":
                print("so i know that the netmask is not valid")
                return False
            elif symbol == "1":
                checking_ones = False
        print("I'm done so I know the netmask is valid")
        return True
在我的代码中有一些错误。当我检查
1
时,它会显示第一个为真,第二个为假。。。所有
1
必须返回
True
,所有0必须返回
False

def is_valid_netmask(numberlist):
    ips = numberlist
    result = True
    #for ip in ips:
        #num = int(ip)
        #if not (num >= 0 and num <= 255):
            #result = False
    if len(ips) != 4:
        return False

    if result == False:
        print("not valid")
    else:
        print("valid")
        octet = ips
        octet_bin = [format(int(i), '08b') for i in octet]
        binary_netmask = ("").join(octet_bin)
        print(binary_netmask)

        checking_ones = True
        for symbol in binary_netmask:
            print("the current symbol is ", symbol)
            print(f"I only encountered one so far: {checking_ones}")
            if checking_ones and symbol == "0":
                print("so i know that the netmask is not valid")
                return False
            elif symbol == "1":
                checking_ones = False
        print("I'm done so I know the netmask is valid")
        return True

[编辑]对不起,我的原始答案让我感到困惑

当我们开始检查位时,我们需要第一个数字是1。然后我们可以接受尽可能多的。然而,一旦我们遇到0,我们就只能接受剩余位的0

accept_zero_only=False
第一位=真
对于二进制网络掩码中的符号:
打印(“当前符号为”,符号)
打印(“到目前为止我是否遇到0?”仅接受0)
如果仅接受0且符号=“1”:
打印(“因此我知道网络掩码无效”)
返回错误
elif符号==“0”:
print(“遇到零!从现在起,我们只接受零。”
仅接受0=真
如果第一个_位和符号==“0”:
打印(“第一位应该是1!”)
返回错误
第一位=假
[edit2]我在原始脚本中集成了上述内容,并做了一些小改动,然后运行它以获得以下输出

def is_valid_netmask(numberlist):
    ips = numberlist

    if len(ips) != 4:
        print "Input array should contain 4 numbers, was:" , len(ips)
        return False

    for ip in ips:
        num = int(ip)
        if not (num >= 0 and num <= 255):
            print "Array contained number", ip, "which is not in [0,255] range."
            return False

    octet = ips
    octet_bin = [format(int(i), '08b') for i in octet]
    binary_netmask = ("").join(octet_bin)
    print(binary_netmask)

    accept_zero_only = False
    first_bit = True
    for symbol in binary_netmask:
        if accept_zero_only and symbol == "1":
            print("Netmask is not valid, contains alternating 1s and 0s and 1s again")
            return False
        elif symbol == "0":
            accept_zero_only = True
        if first_bit and symbol == "0":
            print("First bit should be a 1, netmask is not valid")
            return False
        first_bit = False
    print("Netmask is valid")
    return True

print is_valid_netmask([255,255,0,0,0])    # False
print is_valid_netmask([256,255,255,255])  # False
print is_valid_netmask([255,0,0,0])        # True
print is_valid_netmask([192,0,0,0])        # True
print is_valid_netmask([0,255,255,255])    # False
print is_valid_netmask([255,0,255,0])      # False

def是有效的网络掩码(numberlist):
ips=数字列表
如果len(ips)!=4:
打印“输入数组应包含4个数字,was:,len(ips)
返回错误
对于ip中的ip:
num=int(ip)

如果不是(num>=0和num[edit]我的道歉,我在最初的回答中感到困惑

当我们开始检查位时,我们需要第一个数字为1。然后我们可以接受尽可能多的1。然而,一旦我们遇到0,我们只能接受剩余位的0

accept_zero_only=False
第一位=真
对于二进制网络掩码中的符号:
打印(“当前符号为”,符号)
打印(“到目前为止我是否遇到0?”仅接受0)
如果仅接受0且符号=“1”:
打印(“因此我知道网络掩码无效”)
返回错误
elif符号==“0”:
print(“遇到零!从现在起,我们只接受零。”
仅接受0=真
如果第一个_位和符号==“0”:
打印(“第一位应该是1!”)
返回错误
第一位=假
[edit2]我在原始脚本中集成了上述内容,并做了一些小改动,然后运行它以获得以下输出

def is_valid_netmask(numberlist):
    ips = numberlist

    if len(ips) != 4:
        print "Input array should contain 4 numbers, was:" , len(ips)
        return False

    for ip in ips:
        num = int(ip)
        if not (num >= 0 and num <= 255):
            print "Array contained number", ip, "which is not in [0,255] range."
            return False

    octet = ips
    octet_bin = [format(int(i), '08b') for i in octet]
    binary_netmask = ("").join(octet_bin)
    print(binary_netmask)

    accept_zero_only = False
    first_bit = True
    for symbol in binary_netmask:
        if accept_zero_only and symbol == "1":
            print("Netmask is not valid, contains alternating 1s and 0s and 1s again")
            return False
        elif symbol == "0":
            accept_zero_only = True
        if first_bit and symbol == "0":
            print("First bit should be a 1, netmask is not valid")
            return False
        first_bit = False
    print("Netmask is valid")
    return True

print is_valid_netmask([255,255,0,0,0])    # False
print is_valid_netmask([256,255,255,255])  # False
print is_valid_netmask([255,0,0,0])        # True
print is_valid_netmask([192,0,0,0])        # True
print is_valid_netmask([0,255,255,255])    # False
print is_valid_netmask([255,0,255,0])      # False

def是有效的网络掩码(numberlist):
ips=数字列表
如果len(ips)!=4:
打印“输入数组应包含4个数字,was:,len(ips)
返回错误
对于ip中的ip:
num=int(ip)

如果不是(num>=0,如果符号为“1”,则num设置为“1”。如果符号为“1”,则将检查值设置为“False”您将
checking_one
设置为
False
。问题可能来自那里。我使用了您的代码,但它不起作用。它仍然不能给出正确的结果哦!我的错。我想我已经解决了。您能检查edit2程序吗?如果它仍然不能提供您想要的输出,您能给出一个程序失败的输入吗?我已经解决了使用了你的代码,但它不起作用。它仍然没有给出正确的结果哦!我的错。我想我已经修复了它。你能检查一下edit2程序吗?如果它仍然没有给出你想要的输出,你能给出一个程序失败的输入吗?