Aaron学习笔记

少壮不努力,长大没饭吃!
posts - 4, comments - 13, trackbacks - 0, articles - 37

判断一个IP地址是不是合法

Posted on 2009-05-24 16:05 赞劲小子 阅读(5897) 评论(6)  编辑 收藏 引用 所属分类: 日常练习
能判断格式,IP的范围,输入的不是数字。就记在这里了
#include "stdio.h"
#include 
"stdlib.h"

int parseIP(char *ip){
    register 
char *temp = ip;
    register 
int count = 0;
    register 
int flag = 0;
    
char s1[5],s2[5],s3[5],s4[5];/*存放IP段*/
    
int ip_1,ip_2,ip_3,ip_4;
    
while(*temp != '\0')
    
{
        
if(*temp == '.')
            count
++;
        temp
++;
    }

    flag 
= sscanf(ip,"%[^.].%[^.].%[^.].%[^.]",s1,s2,s3,s4);
    
if(count != 3 || flag != 4){
        printf(
"规则格式错误,");
        
return 0;
    }


    
if(!(check(s1) && check(s2) && check(s3) && check(s4)))
    
{
        printf(
"IP应为合法数字,");
        
return 0;
    }

    ip_1 
= atoi(s1);
    ip_2 
= atoi(s2);
    ip_3 
= atoi(s3);
    ip_4 
= atoi(s4);
    
    
if(  (0 <= ip_1 && ip_1 <= 255&& (0 <= ip_2 && ip_2 <= 255)  
        
&& (0 <= ip_3 && ip_3 <= 255&& (0 <= ip_4 && ip_4 <= 255))
        
return 1;
    
else
    
{
        printf(
"ip范围出错,");
        
return 0;
    }

    
return 1;
}


int check(const char *p) 
{
    
if(p == NULL) 
        
return 0;
    
else {
        
while(*!= '\0'{
            
if(*<= '9' && *p++ >= '0')
                
continue;
            
else 
                
return 0;
        }

    }

    
return 1;
}

Feedback

# re: 判断一个IP地址是不是合法  回复  更多评论   

2010-10-20 21:48 by huangdi915103@gmai.com
你好
01.01.01.01
验证通不过

# re: 判断一个IP地址是不是合法  回复  更多评论   

2010-10-20 22:31 by huangdi915103@gmai.com
我把改成下面的代码,你看对不对,如果有误,请告诉我,谢谢,一起进步

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

bool IsIP(char *ip)
{
char *temp = ip;
int nlength =strlen(temp);
if (nlength<7 || nlength>15)
return false;



int nCount = 0;
int nFlag = 0;
while(*temp != '\0')
{
if(*temp == '.')
nCount++;
temp++;
}

char s1[5],s2[5],s3[5],s4[5]; /*存放IP段*/
nFlag = sscanf(ip,"%[^.].%[^.].%[^.].%[^.]",s1,s2,s3,s4);
if(nCount != 3 || nFlag != 4)
return false;

int ip_1,ip_2,ip_3,ip_4;
ip_1 = atoi(s1);
ip_2 = atoi(s2);
ip_3 = atoi(s3);
ip_4 = atoi(s4);

int len_s1,len_s2,len_s3;
len_s1=strlen(s1);
len_s2=strlen(s2);
len_s3=strlen(s3);

if( (0 <= ip_1 && ip_1 <= 255) && (0 <= ip_2 && ip_2 <= 255) && (0 <= ip_3 && ip_3 <= 255) && (0 <= ip_4 && ip_4 <= 255))
{
if (!((s1[0]='0' && len_s1>1) || (s2[0]='0' && len_s2>1) || (s3[0]='0' && len_s3>1))) //确保每段ip不是以0开头
return true;
}
return false;
}

# re: 判断一个IP地址是不是合法  回复  更多评论   

2010-10-20 22:42 by huangdi915103@gmai.com
对不起,你的那个验证是否"IP应为合法数字"
忘加了

# re: 判断一个IP地址是不是合法  回复  更多评论   

2010-10-22 10:27 by 赞劲小子
你好,输入P没有01.01.01.01这样输入的吧@huangdi915103@gmai.com

# re: 判断一个IP地址是不是合法  回复  更多评论   

2012-05-31 15:21 by fiona
109.66.2.1

# re: 判断一个IP地址是不是合法  回复  更多评论   

2013-11-26 11:04 by yueyongqiang
注意if里面的是==而不是=

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

bool IsIP(char *ip)
{
char *temp = ip;
int nlength =strlen(temp);
if (nlength<7 || nlength>15)
return false;



int nCount = 0;
int nFlag = 0;
while(*temp != '\0')
{
if(*temp == '.')
nCount++;
temp++;
}

char s1[5],s2[5],s3[5],s4[5]; /*存放IP段*/
nFlag = sscanf(ip,"%[^.].%[^.].%[^.].%[^.]",s1,s2,s3,s4);
if(nCount != 3 || nFlag != 4)
return false;

int ip_1,ip_2,ip_3,ip_4;
ip_1 = atoi(s1);
ip_2 = atoi(s2);
ip_3 = atoi(s3);
ip_4 = atoi(s4);

int len_s1,len_s2,len_s3;
len_s1=strlen(s1);
len_s2=strlen(s2);
len_s3=strlen(s3);

if( (0 <= ip_1 && ip_1 <= 255) && (0 <= ip_2 && ip_2 <= 255) && (0 <= ip_3 && ip_3 <= 255) && (0 <= ip_4 && ip_4 <= 255))
{
if (!((s1[0]=='0' && len_s1>1) || (s2[0]=='0' && len_s2>1) || (s3[0]=='0' && len_s3>1))) //确保每段ip不是以0开头
return true;
}
return false;
}

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理