[设计要求]
编写程序,判断一个 IP 地址是否合法,并判断该地址是否属于一个给定子网。
程序设计要求:
(1)命令行格式:ip_test subnet/mask ip_addr。(ip_test 为程序名;subnet 为子网号;
mask 子网掩码连续 1 的个数;ip_addr 是要测试的 IP 地址)
(2)判断子网号 subnet,IP 地址 ip_addr 以及子网掩码 mask 的合法性。
(3)在 IP 地址合法的前提下,判断 IP 地址 ip_addr 是否属于子网 subnet。
(4)输出命令行中的 subnet,子网掩码,ip_addr 的是否合法以及 ip_addr 是否属
于子网 subnet。
[设计思想]
(1)分析子网和 IP 地址的合法性
子网号和 IP 地址格式:X.X.X.X,其中 X 必须是 0~255,中间用点隔开,
由四段组成。全 0 和全 1 以及以 0 和 127 不可用,因此 X 不能全部为 0 和 255,
且第一个 X 不能为 0 和 127。
先分离子网(subnet/mask),以“/”作为分界分离出子网号和子网掩码,然后
使用字符串存储子网号和 IP 地址。初次判断 X 包含的字符是否是 0~9 的字符,
其个数是否处于 1~3 之间,X 的个数是否为 4,点的个数是否为 3,X 与点是否
交替出现,且 X 比点先出现。然后将 X 转换成十进制数,再判断第一个 X 是否
为 127,所有 X 是否全部为 0 和 255。最后判断子网掩码是否为 1~31 之间,如
果合法,再将其转换成点分十进制形式。
(2)分析子网与 IP 地址的关系
将子网号,IP 地址分别和子网掩码相与,如果相与的结果相同,则 IP 地
址属于子网,否则 IP 地址不属于子网。
[程序流程]
[核心代码]
//分离出子网号与子网掩码
void separate(char *str,char s[][22])
{
int i=0,j=0,k;
for(k=0;str[k]!='/'&&str[k];k++)
- 1
- 2
前往页