首页 > 其他分享 >HJ18 识别有效的IP地址和掩码并进行分类统计

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

时间:2023-05-02 16:33:17浏览次数:41  
标签:elif HJ18 len IP地址 掩码 32 255

思路:

程序实现不难,困难的是看懂题目。需要右一点IP地址和子网掩码的基本知识。

困难点1:255.255.255.32就是一个非法的掩码。32的二进制0b100000,不足8位,需要补全为00100000,因此1前面有‘0’是非法掩码。

困难2:当成对的子网掩码或IP地址为非法时,计算为一个错误,并不再对IP地址的类别计数。

 

 1 #255.255.255.32就是一个非法的掩码.
 2 #虽然32的二进制位为0b100000,但补充为8位后00100000,1前面有0,因此为不合法IP地址
 3 def ipc(m):
 4     a,b,c,d,e,f,p=0,0,0,0,0,0,0
 5     if len(m)>4 or len(m)<=0:
 6         f=1
 7     if not (255>=m[0]>=0 and 255>=m[1]>=0 and 255>=m[2]>=0 and 255>=m[2]>=0 ):
 8         f=1
 9     if 126>=m[0]>=1:
10         a=1
11         if m[0]==10:
12             p=1
13     elif 191>=m[0]>=128:
14         b=1
15         if m[0]==172 and 31>m[1]>=16 :
16             p=1
17     elif 223>=m[0]>=192:
18         c=1
19         if m[0]==192 and m[1]==168 :
20             p=1
21     elif 239>=m[0]>=224:
22         d=1
23     elif 255>=m[0]>=240:
24         e=1
25     return [a,b,c,d,e,f,p]
26 def maskc(n):
27     a,b,c,d,e,f,p=0,0,0,0,0,0,0
28     if len(n)>4 or len(n)<=0:
29         f=1
30     if not (255>=n[0]>=0 and 255>=n[1]>=0 and 255>=n[2]>=0 and 255>=n[2]>=0 ):
31         f=1
32     s=''
33     for i in range(4):
34         temp=str(bin(n[i]))[2:]
35         if len(temp)<8:
36             temp=(8-len(temp))*'0'+temp #对转换为二进制不足8位数的二进制,在前面补充”0”
37         s=s+temp
38     if "0" not in s or "1" not in s:
39         f=1
40     while s[-1]=='0':
41         s=s[:-1]
42     if "0" in s:
43         f=1
44     return [a,b,c,d,e,f,p]
45 g=[0,0,0,0,0,0,0]
46 while True:
47     try:
48         list1=input()
49         line = list1.strip().split("~")
50         m=list(map(int,line[0].split(".")))
51         n=list(map(int,line[1].split(".")))
52         if m[0]==0 or m[0]==127:
53             pass#该IP地址不属于任意一类
54         else:
55             g1=maskc(n)
56             g2=ipc(m)     
57             #对不合法IP地址或掩码再次处理,避免重复计数,包括去除重复计数IP地址类别。
58             if g1[5]==1 or g2[5]==1:#避免不合法IP和掩码重复计数,把任意一个置为0
59                 g1=[0,0,0,0,0,0,0]
60                 g2=[0,0,0,0,0,1,0]
61             #print(g1,g2,"after")
62             for i in range(7):
63                 g[i]=g[i]+g1[i]+g2[i]
64             #print(g[5])
65     except:
66         break
67 for i in g:
68     print(i,end=" ")

 

标签:elif,HJ18,len,IP地址,掩码,32,255
From: https://www.cnblogs.com/tanyuanqing/p/17367864.html

相关文章

  • 用C/C++在Linux和Android NDK中获取设备的IP地址
    C/C++开发的获取设备IP地址的代码,下面链接中的版本是在Linuxx86-64环境中编译(Centos7.5)的,也可在其它版本的Linux中或者AndroidNDK('armeabi-v7a','arm64-v8a','x86','x86_64'等版本)中编译。下载地址(此版本须在Linuxx86-64环境中运行):金山文档https://kdocs.cn/l/cd4VM3e......
  • 前端获取ip地址、获取经度、纬度
    记录一次js获取ip地址,经纬度开始使用过很多的方法constgetLocalIP=async()=>{constpc=newRTCPeerConnection();pc.createDataChannel('');constoffer=awaitpc.createOffer();awaitpc.setLocalDescription(offer);constlocalIP=pc.localDescri......
  • 虚拟机配置静态IP地址
       子网IP可以随意设置子网掩码一定要是255.255.255.0网关IP(G)设置成【X.X.X.2】 添加以下五段代码。❗注意:网关地址和DNS服务器要和⑥一样。❗注意:IPADDR静态IP地址和④⑥要不一样,此处有错误,后面我改成了192.168.88.88打开以下文件请查看底部 执行以下......
  • Problem D: IP地址合法性和网络类别检查
    1defIslegal(a):2ip=list(map(int,a))3flag=0#标志是否合法4if0<=ip[0]<=255:5if0<=ip[1]<=255:6if0<=ip[2]<=255:7if0<=ip[3]<=255:8......
  • 一步搞定IP地址查询:这个在线工具帮你快速掌握设备的位置信息!
    前言  今天分享一个免费的在线工具来查询IP地址所在的地理位置。可以通过IP地址所属的网络运营商和其他相关信息来确定设备的位置,包括国家、地区、城市和经纬度等信息。Ip-API官网地址:https://ip-api.com/使用示例  该工具除了提供界面查询,还贴心的提供了API。并且......
  • IP地址与主机名
    IP地址IP地址是联网计算机的网络地址,用于在网络中进行定位。每一台联网的电脑都会有一个地址,用于和其他计算机进行通讯IP地址主要有2个版本,V4版本和V6版本(V6很少用)IPv4版本的地址格式是:a.b.c.d,其中abcd表示0~255的数字,如192.168.88.101就是一个标准的IP地址可以通过命令:ifcon......
  • IP地址笔记
    一、简单局域网构成局域网:一般称为内网。简单局域网构成:交换机、网线、PC(其他IT终端)。交换机:用来组建内网的局域网的设备。交换机用来组建局域网,不能连接内外网,有很多接口。路由器用来连接内外网。二、IP地址IP地址就是一个唯一标识,是一段网络编码(二进制),常用的IPv4由32位组......
  • IP地址配置
    第三章:IP地址的配置IPv4(InternetProtocolVersion4)协议族是TCP/IP协议族中最为核心的协议族。它工作在TCP/IP协议栈的网络层,该层与OSI参考模型的网络层相对应。网络层提供了无连接数据传输服务,即网络在发送分组时不需要先建立连接,每一个分组(也就是IP数据报文)独立发送。3.1IP地址......
  • 子网掩码
    子网掩码的作用子网掩码是在IP地址中用于区分网络ID和主机ID的一个数值。它与IP地址一起使用,以确定哪些位用于标识网络地址和主机地址。子网掩码的作用如下:1)划分网络:在计算机网络中,子网掩码用于将IP地址分成网络ID和主机ID两部分,以便实现对不同网络的划分。通过划分......
  • 判断ip地址是外网还是内网
    https://zhuanlan.zhihu.com/p/461968307外网ip和内网ip的区别:内网IP:顾名思义,就是在内网中使用的ip地址。什么是内网,一个路由器下的电脑都处在一个内网中,也称之为局域网,内网ip是可以重复的。因为局域网可以有很多个,当然出了这个局域网,就无法访问这个内网ip了。公网ip:这个ip的......