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