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.56

    Wenn 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.56

    solltest 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.56

    solltest 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.


  • Administrator

    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?


Anmelden zum Antworten