bool is_ip(const char *ip) { char *ptr = NULL; int i = 0, d = 0; for(; i < 4; ++i) /* 4 dots expected (IPv4) */ { /* Note about strtol: stores in endptr either NULL or '\0' if conversion is complete */ if(!isdigit((unsigned char) *ip) /* most current case (not ip, letter host) */ || (d = strtol(ip, &ptr, 10)) < 0 || d > 255 /* ok, valid number? */ || (ptr && *ptr != 0 && (*ptr != '.' || 3 == i) && ptr != ip)) return false; if(ptr) ip = ptr + 1, ptr = NULL; /* jump the dot */ } return true; }