}
}
+static gboolean __has_private_ip_range(const gchar *s)
+{
+ return g_regex_match_simple("^(10.)|^(172.1[6-9].)|^(172.2[0-9].)|^(172.3[0-1].)|^(192.168.)", s, 0, 0);
+}
+
static gchar *__get_my_private_ip(void)
{
struct ifaddrs *ifaddr = NULL;
struct ifaddrs *ifaddr_ptr = NULL;
void *sin_addr = NULL;
- char addressBuffer[INET_ADDRSTRLEN];
+ char addr_buf[INET_ADDRSTRLEN];
gchar *ip = NULL;
getifaddrs(&ifaddr);
continue;
sin_addr = &((struct sockaddr_in *)ifaddr_ptr->ifa_addr)->sin_addr;
- inet_ntop(AF_INET, sin_addr, addressBuffer, INET_ADDRSTRLEN);
- if (!g_str_has_prefix(addressBuffer, "192.168."))
+ inet_ntop(AF_INET, sin_addr, addr_buf, INET_ADDRSTRLEN);
+ if (!__has_private_ip_range(addr_buf))
continue;
- LOG_DEBUG("%s IPv4 Address %s", (const char *)ifaddr_ptr->ifa_name, addressBuffer);
- ip = g_strdup(addressBuffer);
+ LOG_DEBUG("%s IPv4 Address %s", (const char *)ifaddr_ptr->ifa_name, addr_buf);
+ ip = g_strdup(addr_buf);
break;
}