采用IP地址转换函数,来判断ipv4地址是否合法:
#include <arpa/inet.h>
bool is_valid_ipv4_addr(const char *pIpv4)
{
struct in_addr addr;
if ( 1 == inet_pton(AF_INET, pIpv4, &addr) )
{
printf("\n\t [%s] is a valid IPv4 address\n", pIpv4);
return true;
}
else
{
printf("\n\t [%s] is not a valid IPv4 address\n", pIpv4);
}
return false;
}
采用正则表达式的方法,来判断MAC地址是否合法:
#include <sys/types.h>
#include <regex.h>
bool is_valid_mac_addr(const char *pMac)
{
int status = 0;
regex_t reg;
int nmatch = 1;
regmatch_t pmatch[1];
char errbuf[128] = {0};
const int cflags = REG_EXTENDED | REG_NEWLINE;
const char * pattern = "^([A-Fa-f0-9]{1,2}[:]){5}[A-Fa-f0-9]{1,2}$";
status = regcomp(®, pattern, cflags);
if(status != 0)
{
regerror(status, ®, errbuf, sizeof(errbuf));
fprintf(stderr, "\n\t regcomp fail: %s , pattern '%s' \n", errbuf, pattern);
goto failed;
}
status = regexec(®, pMac, nmatch, pmatch, 0);
if(status != 0)
{
regerror(status, ®, errbuf, sizeof(errbuf));
fprintf(stderr, "\n\t regexec fail: %s , mac:\"%s\" \n", errbuf, pMac);
goto failed;
}
printf("\n\t [%s] is a valid MAC address.\n", pMac);
regfree(®);
return true;
failed:
printf("\t [%s] is not a valid MAC address.\n", pMac);
regfree(®);
return false;
}