18 識別有效的ip位址和子網掩碼

2021-09-06 16:52:11 字數 2641 閱讀 7670

題目描述

請解析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就是乙個非法的掩碼)

本題暫時預設以0開頭的ip位址是合法的,比如0.1.1.2,是合法位址

輸入描述:

多行字串。每行乙個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

思路:1.判斷合法ip:長度為4,每一位0~255

2.判斷合法子網掩碼:長度為4,前面為連續的1,後面全是0

3.判斷a\b\c\d\e類和私有類

import sys

def checkip(ip):

if len(ip) != 4 and '' in ip:

return false

else:

for i in range(4): # 判斷每乙個.分割的是否為0~255

if int(ip[i]) < 0 or int(ip[i]) > 255:

return false

else: # 都滿足返回true

return true

list = ['254', '252', '248', '240', '224', '192', '128', '0'] # 8位,末尾逐步為0的數

def checkmask(ms):

if len(ms) != 4: # 先判斷長度

return false

if ms[0] == '255':

if ms[1] == '255':

if ms[2] == '255':

if ms[3] in list: # 第四個開始出現0

return true

else:

return false

elif ms[2] in list and ms[3] == '0': # 第三個開始出現0,第四個必須為0

return true

else:

return false

elif ms[1] in list and ms[2] == '0' and ms[3] == '0':

return true

else:

return false

elif ms[0] in list and ms[1] == '0' and ms[2] == '0' and ms[3] == '0':

return true

else:

return false

a=0b = 0

c = 0

d = 0

e = 0

err = 0

private = 0

while true:

string=sys.stdin.readline().strip()

if string=='':

break

ipstr,msstr=string.split('~')

iplist = ipstr.split('.')

mslist = msstr.split('.')

if checkip(iplist) and checkmask(mslist):

if 1<=int(iplist[0])<=126:

a+=1

if 128<=int(iplist[0])<=191:

b+=1

if 192<=int(iplist[0])<=223:

c+=1

if 224 <= int(iplist[0]) <= 239:

d += 1

if 240 <= int(iplist[0]) <= 255:

e += 1

if int(iplist[0])==10 or (int(iplist[0])==172 and 16<=int(iplist[1])<=31) or (int(iplist[0])==192 and int(iplist[1])==168):

private+=1

else:

err+=1

print(a,b,c,d,e,err,private)

HJ 18 識別有效的IP位址和掩碼並進行分類統計

先進行出錯處理,然後分類統計。請解析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 ...

識別有效的IP位址和掩碼並進行分類

請解析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 2...

識別有效的IP位址和掩碼並進行分類統計

include include include include using namespace std static int result 7 儲存最後結果的陣列 string chang string str 轉換為二進位制 itoa num,tmp1,2 把num轉換為二進位制,並以字串形式儲存...