SabbaT[GM]
Silver 2
Over 36 posts and comments.
Likes : 3
| #1Subject: Get IP code 5/19/2020, 3:46 am | |
| bueno no voy a poner el codigo entero por que mis exes estan muy tuneados. este fragmento de codigo sirve para "averiguar" las 3 IPs importantes de nuestras PCs. cada uno le da el uso que quiere. este ejemplo muestra para que lo uso yo... mis exes estan hechos para que quien upea el servidor, se olvide de los CFG del gate, main y world server. incluso, supongan que yo los borro a los tres CFGs. cada exe genera su propio CFG con las ips de la maquina. el puerto y algunas cosas mas que necesitan. los archivos son editables, y updateables manualmente. cuando el programa dectecta discrepancia entre las ipv4, ipv6, o la external ip. automaticamente regenera el CFG, guardando informacion critica como el puerto del exe. y algunas cosas mas y updateando las ip nuevas. con este codigo que desarrolle. nunca mas volvi a abrir los CFG para cambiar las IPs. todo es automatico. las letras en amarillo son la parte que regenera el CFG [You must be registered and logged in to see this link.]por lo pronto, solo les dejare el metodo para que puedan obtener las ips. y denle el uso que quieran. podrian implementarlo en el client. y transferir la info al HG. para implementar medidas restrictiva de coneccion en la clase XSocket en casa de querer que esas ips no se vuelvan a conectar. de nada sirve blokear una cuenta si puede conectarse con otra. - Code:
-
void MSC::getIPAddresses(char *cipext, char *cipa4, char *cipa6, WORD wPort) { struct addrinfo *result = nullptr; struct addrinfo hints; struct addrinfo *ptr = nullptr; struct sockaddr_in *sockaddr_ipv4; struct sockaddr_in6 *sockaddr_ipv6; LPSOCKADDR sockaddr_ip; char ipstringbuffer[46]; DWORD ipbufferlength = 46; int iRetval; int iRet1, iRet2; char cPort[16], cHostName[256];
memcpy(cipext, "ERROR", 5); memcpy(cipa4, "ERROR", 5); memcpy(cipa6, "ERROR", 5); ZeroMemory(cHostName, sizeof(cHostName)); iRet1 = gethostname(cHostName, 256); switch (iRet1) { case 0: ZeroMemory(&hints, sizeof(hints)); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; ZeroMemory(cPort, sizeof(cPort)); wsprintfA(cPort, "%u", wPort); iRet2 = getaddrinfo(cHostName, cPort, &hints, &result); switch (iRet2) { case 0: for (ptr = result; ptr != nullptr; ptr = ptr->ai_next) { switch (ptr->ai_family) { case AF_INET: { sockaddr_ipv4 = (struct sockaddr_in *)ptr->ai_addr; memcpy(cipa4, inet_ntoa(sockaddr_ipv4->sin_addr), 16); } break; case AF_INET6: { sockaddr_ipv6 = (struct sockaddr_in6 *) ptr->ai_addr; sockaddr_ip = (LPSOCKADDR)ptr->ai_addr; ipbufferlength = 46; ZeroMemory(ipstringbuffer, sizeof(ipstringbuffer)); iRetval = WSAAddressToStringA(sockaddr_ip, (DWORD)ptr->ai_addrlen, NULL, ipstringbuffer, &ipbufferlength); if (iRetval != 0) memcpy(cipa6, "ERROR", 5); else memcpy(cipa6, ipstringbuffer, strlen(ipstringbuffer)); } break; } } freeaddrinfo(result); break; default: { PutLogList("(*)An error has occurred in getaddrinfo function.", 1); PutLogList("(*)Start Up ABORTED.", 1); memcpy(cipa4, "ERROR", 5); memcpy(cipa6, "ERROR", 5); } break; } break; case SOCKET_ERROR: { PutLogList("(*)An error has occurred in gethostname function.", 1); PutLogList("(*)Start Up ABORTED.", 1); memcpy(cipa4, "ERROR", 5); memcpy(cipa6, "ERROR", 5); } break; } HINTERNET net = InternetOpenA("IP retriever", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); HINTERNET conn = InternetOpenUrlA(net, "http://myexternalip.com/raw", NULL, 0, INTERNET_FLAG_RELOAD, 0); char buffer[16]; DWORD read; ZeroMemory(buffer, sizeof(buffer)); buffer[0] = '\0'; InternetReadFile(conn, buffer, sizeof(buffer) / sizeof(buffer[0]), &read); memcpy(cipext, buffer, 16); InternetCloseHandle(net); } |
|