导航
  • 主页
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

IP验证

jacktion2004 2010-08-08 10:25:04
通过一个文本框输入192.168.1.1 ,我想写一个函数验证IP有效。
...全文
61 点赞 收藏 10
写回复
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
bdzwj 2010-08-09

bool check_ip(const char* ip)
{
if (!ip)
return false;

int s= 0,n = -1;
const char* p = ip;
while(*p == ' ') p++;
while(*p) {
if (*p == '.') {
n = -1;
s++;
}else if (*p >= '0' && *p <= '9') {
n = (n == -1) ? (*p - '0') : n * 10 + (*p - '0');
if (n > 255) return false;
}
else return false;
p++;
}
return s == 3 && n >= 0;
}

int main(int argc, char* argv[])
{
const char* pstr[] = {
{""},
{"..."},
{" 192.168.0."},
{"aa.11.24.33"},
{"192.168.0.0"},
{"192.124.0.0a"},
{"110.1c2.124.22"},
{"110.1982.124.22"},
{"a10.198.124.22"},
{"10.198.124.22.230"},
{NULL}
};

for (int i = 0; i < 11; i++ ) {
printf("%s check_ip : %s\n",pstr[i], check_ip(pstr[i]) ? "true" : "false");
}

_getch();
return 0;
}


回复
bdzwj 2010-08-09
bool check_ip(const char* ip)
{
if (!ip)
return false;

int s= 0,n = -1;
const char* p = ip;
while(*p == ' ') p++;
while(*p) {
if (*p == '.') {
n = -1;
s++;
}else if (*p >= '0' && *p <= '9') {
n = (n == -1) ? (*p - '0') : n * 10 + (*p - '0');
if (n > 255) return false;
}
else return false;
p++;
}
return s == 3 && n >= 0;
}

int main(int argc, char* argv[])
{
const char* pstr[] = {
{""},
{"..."},
{" 192.168.0."},
{"aa.11.24.33"},
{"192.168.0.0"},
{"192.124.0.0a"},
{"110.1c2.124.22"},
{"110.1982.124.22"},
{"a10.198.124.22"},
{"10.198.124.22.230"},
{NULL}
};

for (int i = 0; i < 11; i++ ) {
printf("%s check_ip : %s\n",pstr[i], check_ip(pstr[i]) ? "true" : "false");
}

_getch();
return 0;
}
回复
ok1234567 2010-08-09


BOOL IsaIPv4(const char *psz)
{
if(strlen(psz) > 15 || strlen(psz) < 7) return FALSE;
int iPoint = 0;
const char *b = psz;
while(*psz)
{
if(*psz == '.')
{
if(psz-b < 1) return FALSE;
if(psz-b > 1 && *b == '0') return FALSE;
if(atoi(b) > 255) return FALSE;
iPoint++;
b = psz+1;
}
else if(!isdigit(*psz)) return FALSE;
psz++;
}

if(iPoint != 3) return FALSE;
if(psz-b < 1) return FALSE;
if(psz-b > 1 && *b == '0') return FALSE;
if(atoi(b) > 255) return FALSE;

return TRUE;
}
回复
Yanger_xy 2010-08-09
chch拆分字符串
回复
Sou2012 2010-08-09
MFC里有一个这样的IP控件的,会自动验证是不是有效的IP地址。
回复
stjay 2010-08-08
UINT a,b,c,d;
sscanf(strIP,"%u.%u.%u.%u",&a,&b,&c,&d)
if (0<=a<256 && 0<=b<256 && 0<=c<256 && 0<=d<256)
回复
xingpacer 2010-08-08
[Quote=引用 2 楼 coding_hello 的回复:]

C/C++ code

bool CheckIp(const char* ip)
{
//长度不能超过15位吧,最多是aaa.bbb.ccc.eee
if (!ip || strlen(ip)>15) return false;

char szIP[16] = {0};
strcpy(szIP, ip);

//按'.'拆开成4段
in……
[/Quote]正解,LZ可以测试一下~
回复
adamwyb 2010-08-08
其实就是字符串比较啦,对这个字符串进行分析就好了
回复
野男孩 2010-08-08

bool CheckIp(const char* ip)
{
//长度不能超过15位吧,最多是aaa.bbb.ccc.eee
if (!ip || strlen(ip)>15) return false;

char szIP[16] = {0};
strcpy(szIP, ip);

//按'.'拆开成4段
int nCnt = 0;
char* p = strtok(szIP, ".");

while(p)
{
int val = 0;
int i = 0;
do
{
//每个字符都是数字,并且长度不超过3位
if (i>=3 || p[i] < '0' || p[i] >'9')
{
val = 256;
break;
}
val= val*10 + p[i] - '0';
}while(p[++i]);

//转成数字后,不能超过255
if (val > 255)
break;
++nCnt;
p = strtok(NULL, ".");
}

//如果p不为空,或者长度不是4段,都有问题
if (!p && nCnt==4)
return true;
else
return false;
}


没验证,lz简单看下思路吧
回复
qiangorqiang 2010-08-08
这个用到这则表达式实现比较简单。
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……