IP位址的合法性驗證 程式

2021-04-20 00:26:06 字數 3004 閱讀 9594

這幾天做網路的課程設計,選了一道程式題

目的:

掌握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 切割...