diff --git a/src/cmdline.c b/src/cmdline.c index 89e9337..25b7637 100644 --- a/src/cmdline.c +++ b/src/cmdline.c @@ -27,9 +27,9 @@ const char *gengetopt_args_info_purpose = "Convert an IP to country code"; -const char *gengetopt_args_info_usage = "Usage: ip_to_geo --ip |--daemon [--port ] [--bind-ip ]"; +const char *gengetopt_args_info_usage = "Usage: ip_to_geo --ip |--daemon [--port ] [--bind-ip ]"; -const char *gengetopt_args_info_description = "Convert an IP to country code. Currently, onyl IPv4 supported"; +const char *gengetopt_args_info_description = "Convert an IP to country code."; const char *gengetopt_args_info_help[] = { " -h, --help Print help and exit", diff --git a/src/cmdline.ggo b/src/cmdline.ggo index 4f23f6f..903818c 100644 --- a/src/cmdline.ggo +++ b/src/cmdline.ggo @@ -1,8 +1,8 @@ package "ip_to_geo" version "0.1" purpose "Convert an IP to country code" -usage "ip_to_geo --ip |--daemon [--port ] [--bind-ip ]" -description "Convert an IP to country code. Currently, onyl IPv4 supported" +usage "ip_to_geo --ip |--daemon [--port ] [--bind-ip ]" +description "Convert an IP to country code." section "Interactive mode" option "ip" i "IP to convert" typestr="ip" string optional diff --git a/src/ip_to_geo.c b/src/ip_to_geo.c index 49c83e8..506697f 100644 --- a/src/ip_to_geo.c +++ b/src/ip_to_geo.c @@ -86,43 +86,26 @@ const uint8_t* get_country_code(const uint8_t* idx) return country_codes[*idx]; } -/* int strip_to_int(char* strip_, uint32_t* ip) */ -/* { */ -/* char* saveptr = NULL; */ -/* char* cur; */ -/* int i; */ -/* char* strip = strdup(strip_); */ - -/* *ip = 0; */ - -/* for(i=3; i>=0; i--) */ -/* { */ -/* cur = strtok_r(strip, ".", &saveptr); */ -/* if (!cur) goto end; */ -/* *ip += atoi(cur) << (8*i); */ -/* strip = NULL; */ -/* } */ - -/* cur = strtok_r(strip, ".", &saveptr); */ -/* end: */ -/* free(strip); */ -/* return (cur)?-1:0; */ -/* } */ - int interactive(struct gengetopt_args_info* params) { + uint8_t ip[16]; const uint8_t* cc; - int ret; + int ret, ip_size=4; - ret = inet_addr(params->ip_arg); - if (ret == INADDR_NONE) + ret = inet_pton(AF_INET, params->ip_arg, ip); + if (ret != 1) { - if (!params->quiet_flag) - fprintf(stderr, "Invalid IP %s\n", params->ip_arg); - return -1; + ip_size = 16; + ret = inet_pton(AF_INET6, params->ip_arg, ip); + if (ret != 1) + { + if (!params->quiet_flag) + fprintf(stderr, "Invalid IP %s\n", params->ip_arg); + return -1; + } } - cc = ip_to_geo((uint8_t*)&ret, 4); + cc = ip_to_geo((uint8_t*)&ret, ip_size); if (params->quiet_flag) printf("%s\n", (cc)?(char*)get_country_code(cc):"");