c++ DNS in IP auflösen GetAddressByName()

hallo,

ich brauche hilfe für eine funktion, die mir z.b. von www.gmx.de die ip-adresse liefert. gefunden habe ich bissher den befehl: GetAddressByName(). aber was muss ich alles machen um damit die ip in eine variable zu bekommen? in der hilfe habe ich schon geguckt... aber verstehe das nicht so richtig.. wäre über ein beispiel sehr dankbar

mfg, 0ImZ
 
ich raffs net xD ich hab echt kp was ich machen soll es kommen nur fehler -.-

kann mir mal einer nen fertigen funktionierenden quelltext posten der die ip von www.google.de rausfindet und ausgibt ? mit includes für borland builder 6... da gehts nämlich schon los.. nichtmal das: #include <netdb.h> akzeptiert er -.-

mfg, 0ImZ
 
Code:
#include <iostream>
#ifdef linux
#include <netdb.h> // gethostbyname(), hostent
#include <arpa/inet.h> // inet_ntoa()
#else
#include <winsock2.h>
#endif

int main()
{
using namespace std;

#ifndef linux
WSADATA w;
if(int result = WSAStartup(MAKEWORD(2,2), &w) != 0)
{
cout << "Winsock 2 konnte nicht gestartet werden! Error #" << result << endl;
return 1;
}
#endif

cout << "Bitte gebe einen Hostnamen ein: ";
string Hostname;
cin >> Hostname;

hostent* phe = gethostbyname(Hostname.c_str());

if(phe == NULL)
{
cout << "Host konnte nicht aufgeloest werden!" << endl;
return 1;
}

cout << "nHostname: " << phe->h_name << endl
<< "Aliases: ";

for(char** p = phe->h_aliases; *p != 0; ++p)
{
cout << *p << " ";
}
cout << endl;

if(phe->h_addrtype != AF_INET)
{
cout << "Ungueltiger Adresstyp!" << endl;
return 1;
}

if(phe->h_length != 4)
{
cout << "Ungueltiger IP-Typ!" << endl;
return 1;
}

int Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(Socket == -1)
{
cout << "Socket konnte nicht erstellt werden!" << endl;
return 1;
}

sockaddr_in service;
service.sin_family = AF_INET;
service.sin_port = htons(80); // Das HTTP-Protokoll benutzt Port 80

char** p = phe->h_addr_list; // p mit erstem Listenelement initialisieren
int result; // Ergebnis von connect
do
{
if(*p == NULL) // Ende der Liste
{
cout << "Verbindung fehlgschlagen!" << endl;
return 1;
}

service.sin_addr.s_addr = *reinterpret_cast<unsigned long*>(*p);
++p;
result = connect(Socket, reinterpret_cast<sockaddr*>(&service), sizeof(service));
}
while(result == -1);

cout << "Verbindung erfolgreich!" << endl;

#ifdef linux
close(Socket);
#else
closesocket(Socket);
#endif
}
Quelle
les' dir das Ganze ruhig mal durch.
 
so ich hab mir das von Extinction mal durchgelesen.. scheint eigl auch ganz logisch.. aber da ich mit guioberfläsche arbeite klappts immer noch nicht so ganz. an welcher stelle sage ich dem prog denn da welche dns ich auflösen möchte?

thx schon mal... 0ImZ
 
Du willst das in eine WinAPI einbauen? Soeinen Code habe ich noch rumliegen. Hier mal eine abgespeckte Version, auf's Wesentliche reduziert: ^^
Code:
const char* cchIP ="";
static HWND hListbox;
string strConnectIP;
char szBuffer[256];
u_long arg = 1;
SOCKADDR_IN addr;
SOCKET s;

case WM_COMMAND:
switch ( LOWORD (wParam))
{		
case 1: // Wird also ausgeführt, wenn Button mit dem Index 1 gedrückt wurde

memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten 
addr.sin_family=AF_INET;
addr.sin_port=htons(12345); // wir verwenden mal port 12345

GetDlgItemText( hwnd, 2, szBuffer, sizeof(szBuffer)/sizeof(char) ); //IP auslesen von einer Textbox mit Index 2
cchIP=szBuffer;//von char* nach const char* convertieren

hostent *dns = gethostbyname((char*)cchIP); // -> Hostnamen auflösen <-
//Hierbei enthält die const char Variable "cchIP" den Namen.

//DYNDNS-IP in einen String typecasten
strConnectIP="";
unsigned int yx= dns->h_addr_list[0][0]; //Der Array h_addr_list enthält die 4 Teile der IP
//Hier werden jeweils erst ein Addressteil, dann ein Punkt usw. an den Adressstring angehängt.
strConnectIP.append(itoa(yx,szBuffer,10));strConnectIP.append(".");
yx= dns->h_addr_list[0][1];
strConnectIP.append(itoa(yx,szBuffer,10));strConnectIP.append(".");
yx= dns->h_addr_list[0][2];
strConnectIP.append(itoa(yx,szBuffer,10));strConnectIP.append(".");
yx= dns->h_addr_list[0][3];
strConnectIP.append(itoa(yx,szBuffer,10));

(int)SendMessage(hListbox, LB_ADDSTRING, 0, (LPARAM) "IP:");
(int)SendMessage(hListbox, LB_ADDSTRING, 0, (LPARAM) strConnectIP.c_str()); //IP in einer Textbox ausgeben, geht auch über n Popup

closesocket(s);//Socket hinterher wieder schließen, optional

break; //Case's schließen
}
return 0;
 
ich packs net -.-

ja ich weiß ich machs euch hier schwer.. aber mmh. xD

wie würde das script denn aussehen wenn ich:

ein Edit1->Text habe um die dyndns adresse einzugeben

ein Edit2->Text habe um die ip in zahlen auszugeben

und ein button um das ganze in ganz zu setzten... ? das is ja so wie ich das sehe fast der quelltext von extinction.. aber der geht bei mir auch hinten und vorne nicht.

und bitte alle sachen die vorher kommen.. z.b. welche variablen wie deklariert wurden und was includet wurde...

mfg, 0ImZ
 
das is ja so wie ich das sehe fast der quelltext von extinction.. aber der geht bei mir auch hinten und vorne nicht.
Doch, garantiert funktioniert der. Der ist praxiserprobt. ;)
Ich glaube, du hast deinen Compiler nicht richtig eingestellt. Bei JEDEM Compi muss man vorher die libs richtig einbinden. Bei dem borland builder 6 hab ich's schon versucht - erfolglos. (Ich hasse den ^^)
Aber mit MSVC++6 geht es wunderbar. Aber das ist alles auf der Tutorialseite beschrieben. Einfach mal durchlesen...
 
dooooh mmh das hilft mir dann au net xD welche libs müssen denn rein?

also ich will auf jeden fall beim borland bleiben...

aber bei mir lag es auch nich nur an den libs. mir fehlen ja die ganzen deklarationen von den variablen und die includes auch.. schreib die doch bitte auch nochma.

mfg, 0ImZ
 
Zurück
Oben