Jump to content
Sign in to follow this  
Originale

INTERNAL_IP Game FIXED

Recommended Posts

search bool GetIPInfo() in Config.cpp

then replace all the code with its
bool GetIPInfo()
{
	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 || sai->sin_addr.s_addr == 0 || sai->sin_addr.s_addr == 16777343) continue;
		char * netip = inet_ntoa(sai->sin_addr);
		if (g_szPublicIP[0] != '0')
		{
			strlcpy(g_szInternalIP, netip, sizeof(g_szInternalIP));
			fprintf(stderr, "INTERNAL_IP: %s interface %sn", netip, ifap->ifa_name);
		} else if (g_szPublicIP[0] == '0') {
			strlcpy(g_szPublicIP, netip, sizeof(g_szPublicIP));
			fprintf(stderr, "PUBLIC_IP: %s interface %sn", netip, ifap->ifa_name);
		}
	}
}
  • Love 5

Share this post


Link to post
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 %sn", netip, ifap->ifa_name);
#else
			fprintf(stderr, "INTERNAL_IP: %sn", netip);
#endif
		}
		else if (!strncmp(netip, "10.", 3))
		{
			strlcpy(g_szInternalIP, netip, sizeof(g_szInternalIP));
#ifndef __WIN32__
			fprintf(stderr, "INTERNAL_IP: %s interface %sn", netip, ifap->ifa_name);
#else
			fprintf(stderr, "INTERNAL_IP: %sn", netip);
#endif
		}
		else if (g_szPublicIP[0] == '0')
		{
			strlcpy(g_szPublicIP, netip, sizeof(g_szPublicIP));
#ifndef __WIN32__
			fprintf(stderr, "PUBLIC_IP: %s interface %sn", netip, ifap->ifa_name);
#else
			fprintf(stderr, "PUBLIC_IP: %sn", netip);
#endif
		}
	}

#ifndef __WIN32__
	freeifaddrs( ifaddrp );
#else
	WSACleanup();
#endif

	if (g_szPublicIP[0] != '0')
		return true;
	else
		return false;
}

>

bool GetIPInfo()
{
    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 || sai->sin_addr.s_addr == 0 || sai->sin_addr.s_addr == 16777343) continue;
        char * netip = inet_ntoa(sai->sin_addr);
        if (g_szPublicIP[0] != '0')
        {
            strlcpy(g_szInternalIP, netip, sizeof(g_szInternalIP));
            fprintf(stderr, "INTERNAL_IP: %s interface %sn", netip, ifap->ifa_name);
        } else if (g_szPublicIP[0] == '0') {
            strlcpy(g_szPublicIP, netip, sizeof(g_szPublicIP));
            fprintf(stderr, "PUBLIC_IP: %s interface %sn", netip, ifap->ifa_name);
        }
    }
}

well?

Share this post


Link to post

The way I fixed it isn't automatic but I used a CONFIG variable to define the IP. I'm pretty sure that dns would work fine aswell.

Share this post


Link to post

I tried this fix but my friends still can't connect without MC. How to start the server ? Is it need "-I ip" or something ?

Share this post


Link to post

Worth mentioning you are leaking memory and not returning any value.

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.