#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define IPV4 "IPv4"
#define IPV6 "IPv6"
#define NEITHER "Neither"
#define False 0
#define True 1
int checkIPV4(char *ip)
{
int sepNum;
if(ip[0] == '0' || ip[0] == '.' || strlen(ip) > 3 || strlen(ip) == 0)
return False;
sepNum = atoi(ip);
if(sepNum ==0 || sepNum > 255)
return False;
return True;
}
int checkIPV6(char *ip)
{
int i=0;
if(ip[0] == ':' || strlen(ip) > 4 || strlen(ip) == 0)
return False;
for(i=0;i<strlen(ip);i++)
{
if((ip[i] >='0' && ip[i] <='9') || (ip[i] >='a' && ip[i] <='f') || (ip[i] >='A' && ip[i] <='F'))
continue;
else
return False;
}
return True;
}
char *solve(char *IP)
{
if(IP == NULL)
return NEITHER;
char *cur,*pre;
char ip[10] = {0};
char len = 0;
if(strchr(IP,'.'))
{
pre = IP;
cur = strchr(IP,'.');
while(cur)
{
memcpy(ip,pre,cur-pre);
if(checkIPV4(ip) == False)
return NEITHER;
pre = cur + 1;
cur = strchr(pre,'.');
memset(ip,0,10);
len++;
if(len > 3)
return NEITHER;
}
if(len != 3)
return NEITHER;
memcpy(ip,pre,strlen(pre));
if(checkIPV4(ip) == False)
return NEITHER;
return IPV4;
}
else if(strchr(IP,':'))
{
pre = IP;
cur = strchr(IP,':');
while(cur)
{
memcpy(ip,pre,cur-pre);
if(checkIPV6(ip) == False)
return NEITHER;
pre = cur + 1;
cur = strchr(pre,':');
memset(ip,0,10);
len++;
if(len > 7)
return NEITHER;
}
if(len != 7)
return NEITHER;
memcpy(ip,pre,strlen(pre));
if(checkIPV6(ip) == False)
return NEITHER;
return IPV6;
}
}
int main()
{
printf("%s\n",solve("2001:0db8:85a3:0:0:8A000E:0370:11"));
printf("%s\n",solve("172.16.254.1"));
printf("%s\n",solve("172.16.254."));
printf("%s\n",solve("172..254.1"));
printf("%s\n",solve("256.256.256.256"));
printf("%s\n",solve("2001:0db8:95a3:0:0:8A2E:0370:7334"));
printf("%s\n",solve("02001:0db8:95a3:0:0:8A2E:0370:7334"));
printf("%s\n",solve("2001:0db8:95a3::0:8A2E:0370:7334"));
printf("%s\n",solve("2001:0db8:95a3:0:0:8A2E:0370:"));
printf("%s\n",solve("2001:0db8:95a3:0:0:8A2E:0370:02345"));
}