win32 Netzwerkprogrammierung IP und hostname

05/04/2009 - 23:35 von Thomas Steinbach | Report spam
Hallo

wie komme ich am besten an die IP Adresse und den Hostname?

Also ich brauche in meinem Programm die Netwerkadresse
die auch aktiv ist, bzw. zur Verbindung ins Netwerk
genutzt wird.
Wie mache ich das generell und wie mache ich es so,
dass ich bei mehr als einem Interface die "richtige"
Adresse herausbekomme? Quasi die default Adresse.

Dann suche ich noch was in der winapi das mir einerseits
den hostmname ohne domain suffix und dann noch mit domain
suffix zurueckgibt?

ich habe zwar gethostname()
http://msdn.microsoft.com/en-us/library/ms738527(VS.85).aspx

und GetAdaptersAddresses()
http://msdn.microsoft.com/en-us/lib...65915.aspx

gefunden, aber ich braeuchte mal von einem
erfahrenem win32 Programmierer ein Beispiel wie ich das
am besten umsetze. Auch gibt gethostname() ja nur den
hostname ohne domain suffix an - oder?

Leider hagelt es mir auch mein Versuch

#include <winsock2.h>
anzugeben noch eine Menge Fehler die ich nicht
nachvollziehen kann.

z.b:

Warning 1 warning C4005: 'AF_IPX' : macro redefinition C:\Program
Files\Microsoft SDKs\Windows\v6.0A\include\ws2def.h 91 main
Warning 2 warning C4005: 'AF_MAX' : macro redefinition C:\Program
Files\Microsoft SDKs\Windows\v6.0A\include\ws2def.h 124 main
usw.

Wie behebe ich das oder woher kommt das?
zum Binden von ws2_32.lib kommt es erst gar nicht.

Das includieren fuer GetAdaptersAddresses() mit
#include <iphlpapi.h>
und binden an iphlpapi.lib
habe ich noch nicht probiert, aber ich komme ja schon
nicht ueber das #include <winsock2.h> hinaus :-(

Ich hoffe hier kann mir jemand weiterhelfen.


Thomas
 

Lesen sie die antworten

#1 Arno Welzel
07/04/2009 - 06:12 | Warnen spam
Thomas Steinbach schrieb:

wie komme ich am besten an die IP Adresse und den Hostname?

Also ich brauche in meinem Programm die Netwerkadresse
die auch aktiv ist, bzw. zur Verbindung ins Netwerk
genutzt wird.



Es gibt nicht nur die "aktive" Netzwerkverbindung, sondern eine
Routing-Tabelle, aus der sich ergibt, welches Netzwerkinterface für
bestimmte Zieladressen benutzt wird. Das ist meistens nur eine Karte,
aber ebenso gut können das auch mehrere sein, z.B. für einen Server, der
sowohl im LAN als auch über eine öffentliche IP-Adresse ansprechbar ist.

Wie mache ich das generell und wie mache ich es so,
dass ich bei mehr als einem Interface die "richtige"
Adresse herausbekomme? Quasi die default Adresse.



Siehe oben - es gibt keine "default" Adresse.

Dann suche ich noch was in der winapi das mir einerseits
den hostmname ohne domain suffix und dann noch mit domain
suffix zurueckgibt?

ich habe zwar gethostname()
http://msdn.microsoft.com/en-us/library/ms738527(VS.85).aspx

und GetAdaptersAddresses()
http://msdn.microsoft.com/en-us/lib...65915.aspx

gefunden, aber ich braeuchte mal von einem
erfahrenem win32 Programmierer ein Beispiel wie ich das
am besten umsetze. Auch gibt gethostname() ja nur den
hostname ohne domain suffix an - oder?



Siehe Doku - Zitat:

"gethostname() [...]

The form of the host name is dependent on the Windows Sockets
provider—it can be a simple host name, or it can be a fully qualified
domain name."

Garantiert wird nur, daß der so ermittelte Name auch von gethostbyname()
wieder zu einer IP-Adresse auflösbar ist. Vielleicht genügt Dir die so
ermittelte Adresse auch als "default"-Adresse - das ist die erste
Adresse, unter der die Maschine ansprechbar ist.

Leider hagelt es mir auch mein Versuch

#include <winsock2.h>
anzugeben noch eine Menge Fehler die ich nicht
nachvollziehen kann.

z.b:

Warning 1 warning C4005: 'AF_IPX' : macro redefinition C:\Program
Files\Microsoft SDKs\Windows\v6.0A\include\ws2def.h 91 main
Warning 2 warning C4005: 'AF_MAX' : macro redefinition C:\Program
Files\Microsoft SDKs\Windows\v6.0A\include\ws2def.h 124 main
usw.



Kann ich nicht nachvollziehen. Hier mit Visual Studio 2005 klappt das
problemlos.



http://arnowelzel.de
http://de-rec-fahrrad.de

Ähnliche fragen