sexta-feira, 10 de abril de 2015

C++ - GET IP BY NAME | GET NAME BY IP

Olá galera, ultimamente tenho trabalhado muito e ainda não consegui montar um cronograma das minhas atividades pessoais que tenho como meta para esse ano. Preciso fazer isso nesse final de semana!!

Mas hoje quero contribuir com um código em C++ que é simples e muito útil.

O código abaixo em C++ tem como objetivo retornar o IP de um PC que esta na REDE pelo nome passado como parâmetro. E o outro faz o contrário..

Você vai precisar dessas includes:

#include <iostream>
#include <stdio.h>
#include <string>
#include <string.h>
#include <WinSock2.h> 
#include <ws2tcpip.h>

E declarar as seguintes variáveis.

struct hostent *remoteHost;
struct in_addr addr;

Essa function recebe o nome do computador que retornar o IP.

char* getIpByName(char* name) throw(int)
{
   printf("Calling gethostbyaddr with %s\n", name);
        
addr.s_addr = inet_addr(name); 

        if (addr.s_addr == INADDR_NONE) 
{
            printf("O endereço é inválido.\n");
            return NULL;
        } 
else remoteHost = gethostbyaddr((char *) &addr, 4, AF_INET); 

if (remoteHost==NULL) throw(0);

return remoteHost->h_name; //Retorna o IP pelo nome recebido
}

Essa outra aqui recebe o IP e retorna o nome.

char* getNameByIP(char* IP) throw(int)
{
 printf("Calling gethostbyname with %s\n", IP);
          remoteHost = gethostbyname(IP);

 if (remoteHost==NULL) throw(1);

 addr.s_addr = *(u_long *) remoteHost->h_addr_list[0]; 

return inet_ntoa(addr);
}

Agora vamos testar:


int main()
{
    WSADATA wsaData;
    int iResult;

    DWORD dwError;

    iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
    if (iResult != 0) 
{
        printf("WSAStartup failed: %d\n", iResult);
        return 1;
    }


char* URI = "192.192.115";

try
{

if (isalpha(URI[0])) 
{    
char *x = getNameByIP(URI);
printf("\tIP Address: %s\n", x);
}
else 
{
  char *x = getIpByName(URI); 
  printf("\tName: %s\n", x);
}
}
catch(int e) 
{
printf("%s\n", "Ocorreu um erro: HOST NOT FOUND");


system("pause");
    return 0;

}


Utilizei o DEV-C++ para desenvolver, link para download:
http://sourceforge.net/projects/orwelldevcpp/

Qualquer dúvida postem ai..

Abs.

Nenhum comentário:

Postar um comentário