Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define ENABLE_AUTODETECT_INTERNAL_IP
- bool GetIPInfo()
- {
- #ifndef __WIN32__
- struct ifaddrs* ifaddrp = NULL;
- if (0 != getifaddrs(&ifaddrp))
- return false;
- for( struct ifaddrs* ifap=ifaddrp ; NULL != ifap ; ifap = ifap->ifa_next )
- {
- struct sockaddr_in * sai = (struct sockaddr_in *) ifap->ifa_addr;
- if (!ifap->ifa_netmask || // ignore if no netmask
- sai->sin_addr.s_addr == 0 || // ignore if address is 0.0.0.0
- sai->sin_addr.s_addr == 16777343) // ignore if address is 127.0.0.1
- continue;
- #else
- WSADATA wsa_data;
- char host_name[100];
- HOSTENT* host_ent;
- int n = 0;
- if (WSAStartup(0x0101, &wsa_data)) {
- return false;
- }
- gethostname(host_name, sizeof(host_name));
- host_ent = gethostbyname(host_name);
- if (host_ent == NULL) {
- return false;
- }
- for ( ; host_ent->h_addr_list[n] != NULL; ++n) {
- struct sockaddr_in addr;
- struct sockaddr_in* sai = &addr;
- memcpy(&sai->sin_addr.s_addr, host_ent->h_addr_list[n], host_ent->h_length);
- #endif
- char * netip = inet_ntoa(sai->sin_addr);
- if (!strncmp(netip, "192.168", 7)) // ignore if address is starting with 192
- {
- strlcpy(g_szInternalIP, netip, sizeof(g_szInternalIP));
- #ifndef __WIN32__
- fprintf(stderr, "INTERNAL_IP: %s interface %s\n", netip, ifap->ifa_name);
- #else
- fprintf(stderr, "INTERNAL_IP: %s\n", netip);
- #endif
- }
- else if (!strncmp(netip, "10.", 3))
- {
- strlcpy(g_szInternalIP, netip, sizeof(g_szInternalIP));
- #ifndef __WIN32__
- fprintf(stderr, "INTERNAL_IP: %s interface %s\n", netip, ifap->ifa_name);
- #else
- fprintf(stderr, "INTERNAL_IP: %s\n", netip);
- #endif
- }
- else if (g_szPublicIP[0] == '0')
- {
- strlcpy(g_szPublicIP, netip, sizeof(g_szPublicIP));
- #ifndef __WIN32__
- fprintf(stderr, "PUBLIC_IP: %s interface %s\n", netip, ifap->ifa_name);
- #else
- fprintf(stderr, "PUBLIC_IP: %s\n", netip);
- #endif
- }
- }
- #ifndef __WIN32__
- freeifaddrs( ifaddrp );
- #else
- WSACleanup();
- #endif
- if (g_szPublicIP[0] != '0')
- return true;
- else
- {
- #ifdef ENABLE_AUTODETECT_INTERNAL_IP
- if (g_szInternalIP[0] == '0')
- return false;
- else
- strlcpy(g_szPublicIP, g_szInternalIP, sizeof(g_szPublicIP));
- return true;
- #else
- return false;
- #endif
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement