Hostnamen und -nummern

11/08/2012 - 09:05 von Alexander Ausserstorfer | Report spam
Hallo,

momentan versuche ich mich an einem kleinen Programm, bei dem man den
Hostnamen eingeben kann und das die Hostnummer in lesbarer Form ausgeben
soll:

#include <stdio.h>
#include <sys/socket.h> // AF_INET
#include <netdb.h> // struct hostent
#include <netinet/in.h> // struct sockadd_in

main()
{
// Required data
const char servername[15];
printf("Please type in server name: ");
scanf("%c",&servername);

// converting server name in IP number
const char serverIP[16]="";
struct hostent *hostinfo=0; // enry in host database
hostinfo=gethostbyname(servername); // converting name in IP number

// converting IP number in human readable format
inet_ntop(AF_INET,&hostinfo->h_addr_list,&serverIP,16);
printf("IP: %s",&serverIP);
}

Leider kommt bei mir immer die gleiche Hostnummer heraus. Man merkt nur
einen Unterschied, ob man online ist oder nicht. Hat jemand eine Idee,
was ich falsch gemacht habe? (Habe kaum C-Erfahrung).

Danke.

A.
 

Lesen sie die antworten

#1 Heinrich Wolf
11/08/2012 - 10:32 | Warnen spam
"Alexander Ausserstorfer" schrieb im
Newsbeitrag news:
Hallo,

momentan versuche ich mich an einem kleinen Programm, bei dem man den
Hostnamen eingeben kann und das die Hostnummer in lesbarer Form ausgeben
soll:

#include <stdio.h>
#include <sys/socket.h> // AF_INET
#include <netdb.h> // struct hostent
#include <netinet/in.h> // struct sockadd_in

main()
{
// Required data
const char servername[15];
printf("Please type in server name: ");
scanf("%c",&servername);



hier liest Du nur ein Zeichen und keinen String, und zwar nicht in eine
string Variable, sondern in einen Pointer auf string.
Es muss
scanf("%s",servername);
heißen.

// converting server name in IP number
const char serverIP[16]="";
struct hostent *hostinfo=0; // enry in host database
hostinfo=gethostbyname(servername); // converting name in IP number



hostinfo liefert NULL, wenn es keinen passenden host findet.
Mit NULL macht inet_ntop(..., &hostinfo->h_addr_list, ...) einen
Speicherzugriffsfehler.
Du brauchst
if(hostinfo)
{
inet_ntop...
printf...
}

// converting IP number in human readable format
inet_ntop(AF_INET,&hostinfo->h_addr_list,&serverIP,16);



h_addr_list ist ein array von IPs. Du brauchst aber nur die erste
h_addr_list[0].
Das & ist wieder zuviel. Sonst ergibt sich daraus ein Pointer, der Dir nicht
weiterhilft.
Auch bei serverIP ist das & zuviel. serverIP ist schon ein Pointer auf char,
ein String.
Es muss heißen:
inet_ntop(AF_INET, hostinfo->h_addr_list[0], serverIP, 16);

printf("IP: %s",&serverIP);



Auch hier ist das & zuviel.

}

Leider kommt bei mir immer die gleiche Hostnummer heraus. Man merkt nur



Das verstehe ich nicht. Da Du nur ein char an Stelle eines Strings einliest,
sollte auch bei Dir hostinfo immer NULL sein und sich damit immer ein
Speicherzugriffsfehler ergeben.

einen Unterschied, ob man online ist oder nicht. Hat jemand eine Idee,



Woran merkst Du, ob Du online bist?

was ich falsch gemacht habe? (Habe kaum C-Erfahrung).

Danke.

A.

Ähnliche fragen