如何用C语言判断ip地址是否合法? (用inet_addr有问题)

972 篇文章 329 订阅
147 篇文章 46 订阅

        对ip地址进行判断, 可以用很多方法, 比如正则表达式和直接解析法。 但是, 并不是所有的朋友都会正则表达式, 直接解析法则繁琐易错。 下面, 我们换一个思路, 看看如何判断ip地址的合法性(其实这个程序有问题):

 

#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")

int isValidIP(char *ip)
{
	if(INADDR_NONE == inet_addr(ip))
	{
		return -1;
	}

	return 1;
}

int main()
{
	char ips[][100] = 
	{
		"123.456.789.1",
		"116.1.1.29",
		"119.x.1.11",
		"172.18.18.29",
		"-1.1.1.1",
		"0.0.0.0",
		"255.255.255.255",
		"10.85.168.40",
		"256.1.1.1",
		"127.0.0.1", 
		"1.1. 1.1",
		"190.190.190.190",
		"1.1.1",           // 这个被误判为合法的了
		"119.1.1.1",
		""                 // 这个被误判为合法的了

	};
	
	int size = sizeof(ips) / sizeof(ips[0]);
	int i = 0;
	for(i = 0; i < size; i++)
	{
		if(-1 == isValidIP(ips[i]))
		{
			printf("no\n");
		}
		else
		{
			printf("yes\n");
		}
	}

	return 0;
}

       结果:

123.456.789.1--->no
116.1.1.29--->yes
119.x.1.11--->no
172.18.18.29--->yes
-1.1.1.1--->no
0.0.0.0--->yes
255.255.255.255--->no
10.85.168.40--->yes
256.1.1.1--->no
127.0.0.1--->yes
1.1. 1.1--->no
190.190.190.190--->yes
1.1.1--->yes
119.1.1.1--->yes
--->yes

     可以看到, 上述程序是有问题的,那怎么办呢? 我们先判断一下字符串中的点的数目吗? 即便如此, 我们怎么知道不存在其他问题呢? 我以前以为inet_addr是判断ip是否合法的好方法, 没想到存在问题。 

 


     所以, 还是老实一点, 用sscanf吧。 如果大家如果大家有好的方法, 欢迎分享。     

 


 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值