ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python:识别有效的IP地址和掩码并进行分类统计

2021-05-24 22:31:16  阅读:334  来源: 互联网

标签:return python ip IP地址 255.255 split str 0.0 掩码


题目描述

请解析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的个数,之间以空格隔开。

示例1

输入

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_)]))

 

标签:return,python,ip,IP地址,255.255,split,str,0.0,掩码
来源: https://blog.csdn.net/kk_gods/article/details/116149692

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有