请解析IP地址和对应的掩码,进行分类识别。要求按照A/B/C/D/E类地址归类,不合法的地址和掩码单独归类。

所有的IP地址划分为 A,B,C,D,E五类

A类地址1.0.0.0~126.255.255.255;

B类地址128.0.0.0~191.255.255.255;

C类地址192.0.0.0~223.255.255.255;

D类地址224.0.0.0~239.255.255.255;

E类地址240.0.0.0~255.255.255.255

私网IP范围是:

10.0.0.0~10.255.255.255

172.16.0.0~172.31.255.255

192.168.0.0~192.168.255.255

子网掩码为二进制下前面是连续的1,然后全是0。(例如:255.255.255.32就是一个非法的掩码)

注意二进制下全是1或者全是0均为非法

1. 类似于【0.*.*.*】和【127.*.*.*】的IP地址不属于上述输入的任意一类,也不属于不合法ip地址,计数时可以忽略

2. 私有IP地址和A,B,C,D,E类地址是不冲突的

输入描述:

多行字符串。每行一个IP地址和掩码,用~隔开。

输出描述:

统计A、B、C、D、E、错误IP地址或错误掩码、私有IP的个数,之间以空格隔开。

10.70.44.68~255.254.255.0
1.0.0.1~255.0.0.0
192.168.0.2~255.255.255.0
19..0.~255.255.255.0
1 0 1 0 0 2 1

def ip4_check(ip_s):
    ip_4 = ip_s.strip().split(".")
    if len(ip_4) == 4:  # 判断IP是否为4位数
        for i in range(4):
            # 判断IP是否为0-255的整数
            if ip_4[i].isdigit() and ip_4[i] == str(int(ip_4[i])) and 0 <= int(ip_4[i]) <= 255:
                continue
            else:
                return False
        return True
    else:
        return False


def subnet_mask(s):
    if s == '255.255.255.255' or s == '0.0.0.0':
        return False
    sub_mask = s.split('.')
    if len(sub_mask) == 4:
        l = []
        for i in sub_mask:

            if int(i) > 255 or int(i) < 0:
                return False
            bin_ = bin(int(i)).split('b')[1]
            if len(bin_) < 8:
                bin_ = '0'*(8 - len(bin_)) + bin_
            l.append(bin_)
        for i in ''.join(l).split('0')[1:]:
            if len(i) > 0:
                return False
        return True
    else:
        return False


import sys
a, b, c, d, e, err_, pri_ = 0, 0, 0, 0, 0, 0, 0
while 1:
    try:
        string = sys.stdin.readline().strip().split()
        s = string[0].split('~')
        if ip4_check(s[0]) and subnet_mask(s[1]):
            ip_0 = int(s[0].split('.')[0])
            if 1 <= ip_0 <= 126:
                a += 1
                # print(s)
                if ip_0 == 10:
                    pri_ += 1
            elif 128 <= ip_0 <= 191:
                b += 1
                if ip_0 == 172 and 16 <= int(s[0].split('.')[1]) <= 31:
                    pri_ += 1
            elif 192 <= ip_0 <= 223:
                c += 1
                if ip_0 == 192 and int(s[0].split('.')[1]) == 168:
                    pri_ += 1
            elif 224 <= ip_0 <= 239:
                d += 1
            elif 240 <= ip_0 <= 255:
                e += 1
            elif ip_0 == 0 or ip_0 == 127:
                continue
            else:
                err_ += 1
                continue
        else:
            err_ += 1
            continue
    except:
        break

print(' '.join([str(a), str(b), str(c), str(d), str(e), str(err_), str(pri_)]))

题目描述请解析IP地址和对应的掩码,进行分类识别。要求按照A/B/C/D/E类地址归类,不合法的地址和掩码单独归类。所有的IP地址划分为A,B,C,D,E五类A类地址1.0.0.0~126.255.255.255;B类地址128.0.0.0~191.255.255.255;C类地址192.0.0.0~223.255.255.255;D类地址224.0.0.0~239.255.255.255;E类地址240.0.0.0~255.255.255.255私网IP范围是:.. 输入描述: 输入一个十六进制的数值字符串。注意:一个用例会同时有多组输入数据,请参考帖子https://www.nowcoder.com/discuss/276处理多组输入的问题。 输出描述: 输出该数值的十进制字符串。不同组的测试用例用\n隔开。 import java.util.*; import java.io.*; public class Mai 比如 255.255.255.0 可以化为 11111111 11111111 11111111 00000000 子网掩码如果想合法,则需要满足:二进制数前面都是1,后面都是0。同时每一个数字是不可以大于255的。因为大于255,二进制数就会超过8位。 255.255.255.0就是一个合法的子网掩码,因为其前24位是1 请解析IP地址和对应的掩码进行分类识别。要求按照A/B/C/D/E类地址归类,不合法的地址和掩码单独归类。所有的IP地址划分为 A,B,C,D,E五类 A类地址从1.0.0.0到126.255.255.255; B类地址从128.0.0.0到191.255.255.255; C类地址从192.0.0.0到223.255.255.255; D类地址从224.0.0.0到239.255.255.255; E类地址从240.0.0.0到255.255.255.255 私网IP范围是: 从10.0.0.
之前在牛客网上看到一道关于TCP/IP的题目,当时不是很理解子网掩码的机制没有做出来。前段时间看《图解TCP/IP》刚好里面有讲到这部分的内容,刚好把这道题解决了,知识点分析的感觉通俗易懂,特此分享下。 下列选项中,属于"10.174.20.176/28"该网段的有效IP地址是: A 10.174.20.174 B 10.174.20.1...
n = [0,0,0,0,0,0,0] #【A,B,C,D,E,错误ip或掩码,私有ip】 l =['254','252','248','240','224','192','128','0'] while 请解析IP地址和对应的掩码进行分类识别。要求按照A/B/C/D/E类地址归类,不合法的地址和掩码单独归类。所有的IP地址划分为 A,B,C,D,E五类: A类地址1.0.0.0~126.255.255.255; B类地址128.0.0.0~191.255.255.255; C类地址192.0.0.0~223.255.255.255; D类地址224
初学者往往搞不清网段划分,更不知道该如何配置子网掩码,今天我来给小白们扫扫盲。 太理论的我今天不想讲,只想结合实例,说明一下,网段的划分。 在阐述正题之前,我们先来说一下10进制,2进制,因为这个问题,要用2进制讲解是最方便的。首先我们知道, 电脑中所有的信息,都是以2进制表示的,IP地址也不例外,IPV4地址是由4个字节的2进制数表示,这4个字节, 在书写时为了表示方便,转换成了10进制,并且用...
位与运算符 按位与运算符“&”是双目运算符。其功能是参与运算的两个数字对应的二进制位相与。只有对应的两个二进制位均为1时,结果位才为1,否则为0。参与运算的数以补码方式出现。 例如,9&5可写算式如下: 00001001(9的二进制补码)&00000101(5的二进制补码) 00000001 (1的二进制补码) 0000 1001 0000 0101 0000 0001 = 1
把十进制转换成二进制,并对连续0的进行计数,输出其中最大值 新人入门,初学python,不足之处请大神多指教 def cou(t):#查找二进制中的0的个数,并输出连续0中最多的个数 s=list(t) for i in range(0,len(s)): if(s[i]==str(0)):#遇到0时开始计数,并用a来计数,b来存储
IP地址是网络中给每台计算机设备分配的唯一标识符,用于在互联网上进行通信。IP地址由32位二进制数组成,通常以四组十进制数表示,例如:192.168.0.1。为了方便管理和分类IP地址被分为四类,分别是A、B、C、D、E类。不同类别的IP地址有不同的网络前缀,也就是划分为不同的网络。 - A类地址:1.0.0.0至126.0.0.0,第一位为0,网络号占用8位,主机号占用24位。 - B类地址:128.0.0.0至191.255.0.0,第一位为10,网络号占用16位,主机号占用16位。 - C类地址:192.0.0.0至223.255.255.0,第一位为110,网络号占用24位,主机号占用8位。 - D类地址:224.0.0.0至239.255.255.255,第一位为1110,用于多播。 - E类地址:240.0.0.0至247.255.255.255,第一位为1111,保留地址。 当一个网络需要分成多个子网络时,就需要使用子网掩码。子网掩码也是32位的二进制数,它由一段1和一段0组成,与IP地址进行按位与运算后,得到的结果就是网络号和子网号。子网掩码分A、B、C三类,分别如下: - A类地址子网掩码:255.0.0.0 - B类地址子网掩码:255.255.0.0 - C类地址子网掩码:255.255.255.0 在实际网络中,为了最大限度地利用IP地址,通常会将网络号和主机号进一步划分为子网号和主机号,以方便管理和分配。比如,一个B类地址可以被划分为多个子网,其中前16位为网络号,中间8位为子网号,最后8位为主机号。子网掩码也可以根据实际需求进行调整,以满足具体的网络需求。