Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
ip-adresse(n) ermitteln

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Descartes
Gast





BeitragVerfasst am: 03. Feb 2002 1:43   Titel: ip-adresse(n) ermitteln

Mit folgendem Programm kann ich den FullQualifiedHostname und die zugehörige IP-Adresse ermitteln.
Wie kann ich allerdings bei einem Rechner der mehrere Netzwerkkarten hat alle IP-Adressen ermitteln ?

Konkret habe ich hier einen Rechner mit zwei Netzwerkkarten.
Wenn ich das Programm aufrufe erhalte ich nur eine der beiden IP-Adressen zurück.
Die erste Idee, dass in hostent_ptr->h_addr_list alle möglichen IP-Adressen des Rechner abgelegt scheint falsch zu sein. Wenn ich mit hostent_ptr->h_addr_list[1] zum Beispiel auf die zweite IP-Adresse zugreifen möchte erhalte ich nur einen core-dump.

Gebt's ihr mir doch mal einen Denkanstoss.

code:

/*
* linux:~ $ man --apropos gethostname
* gethostname (2) - get/set host name
*
* linux:~ $ man --apropos gethostbyname
* gethostbyname (3) - get network host entry
*
* linux:~ $ man --apropos inet_ntoa
* inet_ntoa (3) - Internet address manipulation routines
* inet_ntoa (3pm) [Socket] - load the C socket.h defines and structure manipulators
*
*/

#include <arpa/inet.h> // inet_ntoa()
#include <iostream> // cout, endl
#include <netdb.h> // gethostbyname(char*)
#include <netinet/in.h>
#include <unistd.h> // gethostname(char*,int)
#include <sys/socket.h> // AF_INET
#include <sys/types.h>

#ifndef MAXHOSTNAMELEN
#define MAXHOSTNAMELEN 255
#endif

using namespace std;

int main(int argc, char** argv)
{
char hostnamebuffer[MAXHOSTNAMELEN];
int rc;
struct hostent *hostent_ptr;
in_addr ia;

if (argc == 2)
{
strcpy( hostnamebuffer, argv[1] );
}
else
{
rc = gethostname( hostnamebuffer, MAXHOSTNAMELEN );

if (rc != 0)
{
cerr << "gethostname() failed." << endl;
return 1;
}
}

hostent_ptr = gethostbyname( hostnamebuffer );

if (hostent_ptr == 0)
{
cerr << "gethostbyname() failed." << endl;
return 1;
}

memcpy( (void*)&ia, (void*)hostent_ptr->h_addr_list[0], hostent_ptr->h_length );

cout << " hostname = " << hostnamebuffer << endl;
cout << "full qualified hostname = " << hostent_ptr->h_name << endl;
cout << " ip address = " << inet_ntoa(ia) << endl;

return 0;
}

 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy