IP-Adresse des eigenen Rechners ermitteln

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von nikeee13.

    IP-Adresse des eigenen Rechners ermitteln

    Hallo Leute!

    Mit dem Code

    VB.NET-Quellcode

    1. txt_ipadresse.Text = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName).AddressList.GetValue(2).ToString


    ermittle ich in meiner Anwendung die lokale IP-Adresse. Jedoch funktioniert dies auf zwei Rechnern einwandfrei, auf meinem Notebook wird jedoch statt der "lesbaren" IP-Adresse ein HEX-String ausgegeben (siehe Screenshots).

    Mag vielleicht daran liegen, dass am Notebook eine Netzwerkkarte und WLAN vorhanden ist.

    Ich muss nur die IP-Adresse wissen, unter der der Rechner per TCP Socket erreichbar ist.

    Könnt Ihr mir sagen was ich da falsch mache und eventuell hat jemand ein Codeschnipsel das mir den korrekten Wert ausgibt ?

    LG Roland
    Bilder
    • IP-Adresse_Dez.jpg

      26,61 kB, 425×104, 179 mal angesehen
    • IP-Adresse_Hex.jpg

      28,5 kB, 413×97, 167 mal angesehen
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at

    dive26 schrieb:

    statt der "lesbaren" IP-Adresse ein HEX-String
    Dieser Hex-String ist eine IPv6-Adresse und somit eine gültige IP-Adresse. Das Laptop wäre also durchaus unter dieser Adresse erreichbar. Die Parse-Funtkion der IPAddress-Klasse kann die auch parsen, da die Klasse sowohl IPv4 als auch IPv6 repräsentiert.

    Dein Notebook hat eventuell mehrere IP-Adressen, denn es hat ja auch mehrere Schnittstellen (WLAN/LAN). Deshalb ist sowas:

    VB.NET-Quellcode

    1. AddressList.GetValue(2)
    Eher schlecht. Der Code wird auf Rechnern mit gar keiner Schnittstelle das Programm abstürzen lassen (IndexOutOfRangeException) und auf anderen Rechnern nicht immer das gewünschte Ergebnis liefern, da die Reihenfolge und Anzahl der Adressen nicht immer gleich ist.
    Du solltest lieber alle IP-Adressen, die in der AddressList sind, ausgeben.
    Von meinem iPhone gesendet
    Hallo nikeee13!

    Danke für die Info bezüglich IPv6.

    Ich habe den Fehler gefunden.

    Ich hatte für den WLAN Adapter IPv4 und IPv6 aktiviert - dort wurde eine "lesbare" IP-Adresse angezeigt.
    Beim Ethernet-Adapter hatte ich IPv6 deaktiviert - dort wurde dieser "HEX-Wert" angezeigt.

    Ich habe einfach beim Ethernet-Adapter auch IPv6 aktiviert und schon zeigt mir meine Software eine lesbare und brauchbare IP-Adresse an.

    Der Einwand mit "Rechnern mit gar keiner Schnittstelle" ist zwar berechtigt, jedoch kenne ich keinen Rechner auf den meine Software laufen sollte der über keine Netzwerkkarte verfügt. Und wenn wirklich keine Netzwerkkarte vorhanden sein sollte, dann wird diese Funktion für den TCP Socket ja ohnehin nicht benötigt.

    LG Roland
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „dive26“ ()

    Nun, das Programm funktioniert aber schon bei geringer Konfigurationsänderung nicht mehr richtig. Das kann in Zukunft gewollt oder ungewollt auf den Clients passieren.

    VB.NET-Quellcode

    1. Shared Function GetCurrentIpV4Address() as IPAddress
    2. Dim addresses as IPAddress() = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName).AddressList
    3. Return addresses.FirstOrDefault(Function(ip) ip.AddressFamily = AddressFamily.InterNetwork)
    4. End Function
    5. Shared Function GetCurrentIpV4AddressString() as String
    6. Dim ip as IPAddress = GetCurrentIpV4Address()
    7. return If(ip, "").ToString()
    8. End Function
    Habe es nicht getestet.

    Versuch es mal damit. Die Funktion GetCurrentIpV4AddressString gibt dir die erste IPv4-Adresse zurück, die er findet.

    Sofern es nicht explizit nötig ist, sehe ich übrigens keinen Grund, nicht die IPv6-Adresse zu verwenden. IPv6 ist nunmal die Zukunft. Software, die auf V4 besteht, ist da eigentlich nur hinderlich. Besonders, weil die IPAddress-Klasse aus .NET (und alles, was damit verbunden ist) grundsätzlich unabhängig von der Addressart sind (V4/V6).
    Von meinem iPhone gesendet

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „nikeee13“ ()

    Hallo Nikeee!

    Danke für den Code. Dieser bringt mir nun in jedem Fall eine gültige IPv4 Adresse.

    Das Problem mit der IPv6 Adresse ist, dass diese für den USER äußerst lese- und schreibunfreundlich ist. Auch wenn IPv6 die Zukunft ist. In meinem Anwendungsgebiet ist diese nicht notwendig. Es läuft alles in einem abgeschlossenen lokalen Netzwerk.

    Nochmals vielen Dank für Deine Hilfe :thumbsup:

    LG Roland
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at