Entwickler-Ecke

Internet / Netzwerk - IP-Adresse ohne Hostname


Nico80 - Do 03.08.06 15:49
Titel: IP-Adresse ohne Hostname
Hallo an alle,

ich brauche Hilfe beim Ermitteln der eigenen IP-Adresse(n).

Und zwar ist mir eine Funktion mit WinSock bekannt.
Die Funktion ermittelt die IP-Adressen mit Hilfe des Hostname (getHostbyName).
Was ist wenn der Hostname nicht eindeutig ist?

Oder gibt es eine andere Möglichkeit die Ip-Adressen auszulesen?

Danke für mögliche Vorschläge!!


The Who - Do 03.08.06 15:53

Zitat:
Ich brauche Hilfe beim Ermitteln der eigenen IP-Adresse


Der eigene Rechner heißt doch immer localhost, oder ?


Jetstream - Do 03.08.06 16:00

user profile iconThe Who hat folgendes geschrieben:
Der eigene Rechner heißt doch immer localhost, oder ?


Er sucht wahrscheinlich die externe IP, mit der Andere über das Internet auf seinen PC zugreifen können.


Nico80 - Do 03.08.06 16:00

user profile iconThe Who hat folgendes geschrieben:
Zitat:
Ich brauche Hilfe beim Ermitteln der eigenen IP-Adresse


Der eigene Rechner heißt doch immer localhost, oder ?


Ich kann bzw. muss doch bei Windows XP einen Computernamen bzw. Hostnamen eingeben bzw. ändern. Systemeigenschaften --> Computername.

Die Funktion getHostname (Winsock) liefert genau diesen Computernamen zurück.

Ich suche genau die IP-Adresse, die ich unter den TCP-IP-Eigenschaften eingebe.


Narses - Do 03.08.06 16:17

Moin!

Schau mal hier [http://www.delphi-forum.de/topic_ICMPEchoAPI+quotPingquot+WrapperUnit_53259.html], damit geht das ganz einfach (GetIPByName).

Gib mal in der Beispielanwendung localhost ein, dann liefert er dir bei der Adressauflösung deine eigene lokale IP. Im Quelltext der Demoanwendung kannst du sehen, wie man die Funktion(en) aufruft.

cu
Narses

//EDIT: Link korrigiert :oops:


UliTs - Do 03.08.06 17:14

Also Narses,

ich bin beeindruckt!
Genau Deine Unit habe ich gesucht.
Und sie funktioniert bei mir, sogar auf meinem Win 95-Schätzchen! :)

Uli


UliTs - Do 03.08.06 17:16

Hier noch der korrigierte Link:
http://www.delphi-forum.de/topic_ICMPEchoAPI+quotPingquot+WrapperUnit_53259.html


Nico80 - Fr 04.08.06 09:45

Also wenn ich "localhost" angebe, bekomme ich die IP-Adresse 127.0.0.1
Aber ich möchte ja ohne Angabe eines Computernamens die IP-Adressen bekommen.
Also eine Funktion, die im System nachschaut, unter welchen Adressen der Rechner erreichbar ist.

Hat jemand Erfahrung mit der Windowsfunktion "getIpAddrTable"


UliTs - Fr 04.08.06 10:02

Ich bekomme auch die IP-Adresse 127.0.0.1, aber nur,
wenn ich das Netzwerkkabel von meinem Rechner ziehe
oder wenn alle anderen Rechner im Netzwerk ausgeschaltet
sind.

Uli


Narses - Fr 04.08.06 10:03

Moin!

user profile iconNico80 hat folgendes geschrieben:
Also wenn ich "localhost" angebe, bekomme ich die IP-Adresse 127.0.0.1
Aber ich möchte ja ohne Angabe eines Computernamens die IP-Adressen bekommen.

Ähm, sorry, du mußt das Editfeld leer lassen... :oops: (hab ich die Unit wirklich geschrieben... :gruebel: ist wohl schon was her... ;))

user profile iconNico80 hat folgendes geschrieben:
Also eine Funktion, die im System nachschaut, unter welchen Adressen der Rechner erreichbar ist.

Ja, genau das tut die Funktion GetIPByName, wenn du einen Leerstring übergibst. ;) Hinweis: Wenn du mehrere Adressen erwartest, mußt du das IP-Array nehmen, sonst gibt´s nur die erste IP.

cu
Narses


UliTs - Fr 04.08.06 10:19

Narses hat folgendes geschrieben:
Hinweis: Wenn du mehrere Adressen erwartest, mußt du das IP-Array nehmen, sonst gibt´s nur die erste IP.

Auch bei dem IP-Array bekomme ich nur 1 IP-Adresse zurück:
127.0.0.1 ohne eingestecktes Netzwerkkabel
mit eingestecktem Netzwerkkabel meine lokale IP-Adresse!

Uli


jakobwenzel - Fr 04.08.06 10:25

Und was ist daran falsch? :shock:


Narses - Fr 04.08.06 10:31

Moin!

user profile iconUliTs hat folgendes geschrieben:
Auch bei dem IP-Array bekomme ich nur 1 IP-Adresse zurück:
127.0.0.1 ohne eingestecktes Netzwerkkabel
mit eingestecktem Netzwerkkabel meine lokale IP-Adresse!

Und genau so ist es korrekt. Wenn du eine zweite Netzwerkkarte oder Wählverbindung hast, würde eine weitere Adresse angezeigt werden. ;)

cu
Narses


UliTs - Fr 04.08.06 10:32

Umgekehrte Frage: Was ist daran richtig?

Ich weiß nicht, ob 127.0.0.1 einen Sonderstatus hat.

Bei mir geht es konkret um folgendes Problem:
Meine Anwender bauen für Wochenendveranstaltungen
ein kleines Netzwerk auf. Auf einem der Rechner
soll ein Programm (A) laufen, welches Programmen (B) auf
anderen Rechnern auf Anfrage Daten zur Verfügung stellt.

Programm (A) soll die IP-Adresse seines Rechners anzeigen,
damit die Anwender bei Start des Programms (B) diese
IP-Adresse angeben können.

Das soll natürlich auch funktionieren, wenn der Rechner
mit Programm (B) als erstes eingeschaltet wird.

Uli


Narses - Fr 04.08.06 10:36

Moin!

Das ist korrekt so, den localhost kriegst du nur, wenn keine physikalische Adresse verfügbar ist.

cu
Narses


UliTs - Fr 04.08.06 12:36

Kann man denn bei Antwort IP-Adresse <> 127.0.0.1
davon ausgehen, daß man dann die lokale IP-Adresse
bestimmt hat?

Uli


Narses - Fr 04.08.06 12:43

Moin!

user profile iconUliTs hat folgendes geschrieben:
Kann man denn bei Antwort IP-Adresse <> 127.0.0.1 davon ausgehen, daß man dann die lokale IP-Adresse bestimmt hat?

Das kannst du in jedem Fall, denn 127.0.0.1 ist auch eine lokale IP-Adresse... :P Du führst dann halt nur Selbstgespräche. :mrgreen:

Ja, ich würde sagen, das man das kann. ;)

cu
Narses


UliTs - Fr 04.08.06 13:12

Zitat:
user profile iconNarses hat folgendes geschrieben:
Das kannst du in jedem Fall, denn 127.0.0.1 ist auch eine lokale IP-Adresse... :P Du führst dann halt nur Selbstgespräche. :mrgreen:


Habe ich es richtig verstanden:
Die Adresse 127.0.0.1 existiert immer und bezieht sich immer auf den lokalen Rechner?

Eigentlich müßte sie doch auch dann in der Liste erscheinen, wenn eine physikalische Adresse verfügbar ist, oder? :wink:

Danke für Deine Geduld und Hilfe.

Uli


Born-to-Frag - Fr 04.08.06 13:25

user profile iconUliTs hat folgendes geschrieben:
Die Adresse 127.0.0.1 existiert immer und bezieht sich immer auf den lokalen Rechner?


Richtig :zustimm:


Nico80 - Fr 04.08.06 13:54

Also klappt alles. Vielen Dank für die Hilfe!!!

Aber es muss doch auch eine Möglichkeit geben, an die Informationen aus den Eigenschaften der Netzwerkverbindungen(TCP/IP) zu kommen.
Genauso wie man an den Computernamen kommt. Man gibt die IP-Adressen schließlich ein und diese werden wohl irgendwo gespeichert.
Also auch wenn kein Netzwerkkabel steckt, die IP-Adresse X.X.X.X auszulesen und nicht die 127.0.0.1.


Narses - Fr 04.08.06 14:26

Moin!

user profile iconNico80 hat folgendes geschrieben:
Also klappt alles wunderbar. Veilen Dank!!!

Gern geschehen. ;)

user profile iconNico80 hat folgendes geschrieben:
Die ganze Geschichte bezieht sich für einen sog. IP-Test.

Nun, du redest ein wenig wirr... :gruebel: ;)

user profile iconNico80 hat folgendes geschrieben:
Und zwar gibt es wohl das Phänomen (ich kann es leider nicht reproduzieren), dass nach einem erfolgreichen Windosstart es wohl eine gewisse Zeit dauert bis die IP-Adressen "aktiv" sind.

Ja, und zwar genau so lange, bis du deine Konfig vom DHCP-Server (Router?) bezogen hast. ;)

cu
Narses


Narses - Fr 02.03.07 13:31

Moin!

Oh, du hattest deinen Beitrag nach meinem nochmal bearbeitet... ;) Also, der Vollständigkeit halber, hier noch was dazu:
user profile iconNico80 hat folgendes geschrieben:
Aber es muss doch auch eine Möglichkeit geben, an die Informationen aus den Eigenschaften der Netzwerkverbindungen(TCP/IP) zu kommen.
Genauso wie man an den Computernamen kommt. Man gibt die IP-Adressen schließlich ein und diese werden wohl irgendwo gespeichert.
Also auch wenn kein Netzwerkkabel steckt, die IP-Adresse X.X.X.X auszulesen und nicht die 127.0.0.1.

Das ist nicht so einfach, wie du dir das vorstellst. Eine IP-Adresse wird einem Computer nicht "fest" vergeben, sondern er wird versuchen, diese Adresse "anzunehmen". Wenn z.B. schon ein anderer Host im Netz diese Adresse hat, dann wird die Schnittstelle wieder geschlossen. Noch sehr viel schwieriger ist es, wenn du deine IP-Adresse dynamisch von z.B. einem Router beziehst. Woher willst du sie kennen, wenn du gar keine erhalten hast... ? ;)

Fazit: Es ist vielleicht irgendwie möglich, herauszufinden, was für eine "feste" Adresse du für eine bestimmte Schnittstelle vorgeben möchtest (eine API dafür gibt es AFAIK nicht) - aber leider ist diese Information mehr als bedenklich, weil du ohne eine Netzwerkverbindung gar nicht wissen kannst, ob du diese Adresse auch "benutzen darfst". :idea: Damit ist es faktisch sinnlos, die IP ohne Netzwerkverbindung ermitteln zu wollen. :mahn:

cu
Narses


GTA-Place - Fr 02.03.07 14:53

Meinst du die IP-Adresse, die du im Netzwerk hast? Also z.B. ist der Router 192.168.0.1 und deine eigene ist 192.168.0.2. Suchst du diese Adresse?


Narses - Fr 02.03.07 15:06

Moin!

Wen fragst du? ;)

cu
Narses


GTA-Place - Fr 02.03.07 15:15

Den Thread-Ersteller, da mir nicht ganz klar ist, welche IP-Adresse er möchte.


Narses - Sa 03.03.07 00:16

Moin!

user profile iconGTA-Place hat folgendes geschrieben:
Den Thread-Ersteller, da mir nicht ganz klar ist, welche IP-Adresse er möchte.
Da der Thread schon etwas älter ist, zitiere ich einfach mal:
user profile iconNico80 hat folgendes geschrieben:
Also auch wenn kein Netzwerkkabel steckt, die IP-Adresse X.X.X.X auszulesen und nicht die 127.0.0.1.

Er möchte die Adresse einer Netzwerkschnittstelle im nicht verbundenen Zustand ermitteln. Und genau das ist IMHO sinnlos... ;)

//EDIT: Wenn ich mich recht erinnere, dann ging es in dem (jetzt geänderten) letzten Beitrag von user profile iconNico80 darum, dass er beim Systemstart herausfinden wollte, wann die Schnittstelle eine gültige Adresse hat (war vielleicht auch ein Router im Spiel). Die entsprechende Lösung sollte ein einfacher Ping sein. ;)

cu
Narses


Delete - Sa 03.03.07 02:57

user profile iconBorn-to-Frag hat folgendes geschrieben:
user profile iconUliTs hat folgendes geschrieben:
Die Adresse 127.0.0.1 existiert immer und bezieht sich immer auf den lokalen Rechner?


Richtig :zustimm:
tja, ganz so einfach ist es nicht. es muss halt 'n TCP stack da sein, dann kannst du die adresse auslesen, aber es gibt ja noch andere netzprotokolle und auch systeme ohne netzwerk... obgleich diese immer weniger werden...

btw: die addy localhost, ist eine von mehreren reservierten IP's im TCP/IP protokoll.


Narses - Sa 03.03.07 13:25

Moin!

user profile iconGrenzgaenger hat folgendes geschrieben:
ganz so einfach ist es nicht. es muss halt 'n TCP stack da sein,

Da die hier verwendeten Funktionen auf der WSA basieren, wird es wohl auffallen, wenn sie sich nicht ausführen lassen. ;) Abgesehen davon war das letzte WinOS, das standardmäßig ohne WSA ausgeliefert wurde, W95osrA... 8)

cu
Narses