IP-Adresse aus dem Maschinennamen ermitteln
-
Mit
Dns.GetHostByName(Environment.MachineName).AddressList
bekomme ich ja eine Liste mit allen IP-Adressen, die ein bestimmter PC hat. Woher weiß ich jetzt aber, welche von diesen IP-Adressen diejenige ist, zu der der Maschinenname aufgelöst wird?
Wenn ich zum Beispiel einen Soap-Webservice habe, dann benutze ich ja eine URL im Stil von
soap.tcp://<Maschinenname>:<Port>/<WebServiceObjekt>
Und statt Maschinenname kann ich auch eine IP-Adresse angeben:
soap.tcp://<IPAdresse>:<Port>/<WebServiceObjekt>
Und ich möchte nun wissen: Wie finde ich raus, welche von den IP-Adressen, die ich oben in dem Array erhalte, ist die, die er erhält, wenn er in einer URL den Maschinnennamen zur IP-Adresse auflöst?
-
Was?
I
-
Was was? Ich habe einen Maschinnennamen:
MeinComputer
Der hat mehrere IP-Adressen, die ich mir in einem Array liefern lassen kann:
123.456.7.8
901.234.56.7
890.123.4.56Wenn ich einen Web-Service starte, gebe ich folgende URL ein:
soap.tcp://MeinComputer:50000/WebServiceObject
Diese Adresse wird ja intern aufgelöst nach:
soap.tcp://901.234.56.7:50000/WebServiceObject
Und ich will jetzt wissen: Wie finde ich raus, welche von den IP-Adressen im Array diejenige ist, die in einem Webserviceaufruf benutzt wird, wenn ein Maschinnenname angegeben wird?
-
Das würde GetHostByAdress() erledigen, wenn ... ja wenn GetHostByName/GetHostByAdress nicht längst veraltet wären (siehe Dns.GetHostByName-Methode).
Der nachstehende Code verwendet die Dns.GetHostEntry-Methode und sollte deine Frage beantworten:
using System.Net; class IP_Hostname { public string IP_zu_Hostname(string IPAdresse) { IPHostEntry hostEintrag = Dns.GetHostEntry(IPAdresse); return hostEintrag.HostName; } public string Hostname_zu_IP(string Hostname) { IPHostEntry hostEintrag = Dns.GetHostEntry(Hostname); return hostEintrag.AddressList[0].ToString(); } }
Nachtrag: Wenn dein Computer tatsächlich diese Adressen liefert
Der hat mehrere IP-Adressen, die ich mir in einem Array liefern lassen kann:
123.456.7.8
901.234.56.7
890.123.4.56solltest du ganz schnell einen Augenarzt aufsuchen ...
-
schmidt-webdesign.net schrieb:
public string Hostname_zu_IP(string Hostname) { IPHostEntry hostEintrag = Dns.GetHostEntry(Hostname); return hostEintrag.AddressList[0].ToString(); }
Also im wesentlichen empfiehlst du mir, von den IP-Adressen, die man anhand des Maschinennamens erhält, einfach die erste zu nehmen.
schmidt-webdesign.net schrieb:
Nachtrag: Wenn dein Computer tatsächlich diese Adressen liefert
Der hat mehrere IP-Adressen, die ich mir in einem Array liefern lassen kann:
123.456.7.8
901.234.56.7
890.123.4.56solltest du ganz schnell einen Augenarzt aufsuchen ...
Dir ist schon klar, dass ich jetzt aus Gag einfach nur die Zahlen von 1 bis 9 und 0 hochgezählt habe, oder? So wie bei 555-0157 oder Kreditkartennummer XXXX-XXXX-XXXX-XXXX-XXXX.
-
EiPie schrieb:
Also im wesentlichen empfiehlst du mir, von den IP-Adressen, die man anhand des Maschinennamens erhält, einfach die erste zu nehmen.
Üblich ist folgender Weg:
Erste Adresse nehmen und probieren.
Falls es geht, perfekt.
Falls es nicht geht, zweite Adresse nehmen und probieren.
usw.Falls ein Maschinenname zu mehreren IP-Adressen aufgelöst wird, heisst das schliesslich nichts anderes, als dass man denselben Namen unter den folgenden IP-Adressen findet. Im allgemeinen sind die IP-Adressen dann völlig gleichwertig und stellen nur zusätzliche Anschlüsse über andere Netzwerke dar.
Grüssli
-
Aber was ist, wenn ich auf einem PC zum Beispiel eine virtuelle Maschine laufen habe? Würde das Hostsystem dann nicht auch deren IP-Adresse besitzen?