這幾天做網路的課程設計,選了一道程式題
目的:
掌握ip位址的分類,準確理解子網、掩碼的概念,確切地明了ip位址的合法格式。
要求:
1.在判斷乙個ip位址合法性時要自行編寫**,不要使用任何inet函式。
2.程式要求為命令列程式,格式為:
ip_test subnet/mask ip_addr
其中,程式名稱為ip_test,引數為ip位址/子網掩碼,如:
要測試的ip位址為202.113.16.10,子網號為202.113.16.0,子網掩碼為255.255.255.0,則命令行為:
ip_test 202.113.16.0/24 202.113.16.10
。(因為255.255.255.0是連續的24個1,所以這樣表示)。
3.子網號和子網掩碼的合法性也要檢查。4.
提示
:
在判斷不合法ip時要考慮全面,比如以下情況均屬於不合法
123..2.1
123.23$.2.1
123.2345.2.1
123.23.45.2.1
大概的思路,先詞法分析,看輸入是否正確,再檢查輸入的ip欄位是否正確,遇到的問題
有怎樣去識別子網號,如果是人去做,就將ip段轉換為直觀的二進位製字段去檢視,這裡
採用了類似的方法,程式寫的很亂,也沒有多少積極性去寫
#include
#include
#include
int check(char* iplang, int* array)
temp[j] = '/0';
if (*p != '.')
else
array[k++] = atoi(temp);
}return count;
}
int first(char* iplang, int* array)
char temp[16] = "";
char* p = iplang + t;
int j = 0;
while (*p >= '0' && *p <= '9')
temp[j] = '/0';
array[3] = atoi(temp);
if (*p != '/')
p++;
j = 0;
while (*p >= '0' && *p <= '9')
temp[j] = '/0';
if (*p != '/0')
array[4] = atoi(temp);
return 1;
}
int second(char* iplang, int* array)
temp[j] = '/0';
if (*p != '/0')
array[3] = atoi(temp);
return 1;
}
int ipcheck(int* array)
for (int i = 0; i < 4; i++)
}
return 1;
}
int maskcheck(int* subnet, int* ip, int mask)
if (subnet[0] >127 && subnet[0] < 192 && mask < 16 )
if (subnet[0] >191 && subnet[0] < 224 && mask < 24 )
if (mask > 32)
int t;
int bit[9] = ;
for (int i = 0; i < 4; i++)
if (mask > 8)
else
if (subnet[i] != (ip[i] & bit[t]))
mask -= 8;
}return 1;
}
int subnetcheck(int* net, int* ip)
}
break;}}
if (net[i] == 0)
if (net[i] > ip[i])
itoa(net[i], tnet, 2);
itoa(ip[i], tip, 2);
if (strlen(tnet) != strlen(tip))
char* p = tnet;
int j = strlen(tnet);
int sign = 0;
int bit[8] = ;
for (int k = 0; k < j; i++)
p++;
}if (net[i] + bit[j - sign - 1] <= ip[i])
return 1;
}
int main(int argc, char** argv)
if (strlen(argv[1]) > 18 || strlen(argv[2]) > 15)
char chnet[19] = "";
char chip[16];
strcpy(chnet, argv[1]);
strcpy(chip, argv[2]);
int net[5], ip[4];
int a = first(chnet, net);
int b = second(chip, ip);
int k = 1;
if (a == 0 || b == 0)
if (ipcheck(ip) == 0 || ipcheck(net) == 0)
else
if (maskcheck(net, ip, net[4]) == 0)
if (subnetcheck(net, ip) == 0)
else
if (k == 0)
cout << "正確" << endl;
return 0;
}
IP位址合法性校驗
我們一般用cidr來表示一段ip位址。cidr是這樣乙個字串 先是乙個ipv4的位址的字串表示,加乙個 分隔符,再加乙個13 含 到27 含 之間的整數。比如 192.128.1.134 25 表示從192.128.1.128 含 到192.128.1.255 含 的128個ip位址。前的字段 19...
判斷IP位址的合法性 Java
有時候我們要對使用者輸入的ip位址進行校驗,判斷這個ip位址是不是乙個合法的ip位址。構造乙個正規表示式。判斷使用者的輸入與正規表示式是否匹配。若匹配則是正確的ip位址,否則ip位址格式錯誤。這裡的難點是如何構造出乙個可用的正規表示式。created by yangy on 2017 7 23.pu...
python怎麼判斷IP位址的合法性
使用 python判斷ip位址合法性的方法。1,python實現 root yang python vi check ip.py usr bin python import os,sys defcheck ip ipaddr import sys addr ipaddr.strip split 切割...