说明:判断读取到的字符串IP是否合法
封装
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int InputParaCorrect(const char *cp)
{
struct in_addr inaddr;
if(inet_aton(cp,&inaddr)==0)
{
return -1;
}
return 1;
}
使用:
void main()
{
const char *ip1="192.168.1.101";
const char *ip2="192.168.1.1011";
const char *ip3="192.168.1a.101";
const char *ip4="255.255.255.255";
if(InputParaCorrect(ip1) < 0)
{
printf("%s is not a valid ip\n",ip1);
}
else
{
printf("%s is a valid ip\n",ip1);
}
if(InputParaCorrect(ip2) < 0)
{
printf("%s is not a valid ip\n",ip2);
}
else
{
printf("%s is a valid ip\n",ip2);
}
if(InputParaCorrect(ip3) < 0)
{
printf("%s is not a valid ip\n",ip3);
}
else
{
printf("%s is a valid ip\n",ip3);
}
if(InputParaCorrect(ip4) < 0)
{
printf("%s is not a valid ip\n",ip4);
}
else
{
printf("%s is a valid ip\n",ip4);
}
}
注意事项
不要使用inet_addr函数来判断字符串IP的合法性。
当输入参数无效时,inet_addr函数会返回INADDR_NONE(-1),而255.255.255.255对应的数字IP正好是-1,就会误认为255.255.255.255是不合法IP。
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
void main()
{
const char *ip="255.255.255.255";
in_addr_t inaddr;
inaddr=inet_addr(ip);
if(inaddr==INADDR_NONE)
{
printf("%s is not a valid ip\n",ip);
}
else
{
printf("%s is a valid ip\n",ip);
}
}
输出:
255.255.255.255 is not a valid ip