Montag, 21. Juni 2010

Netzwerk IP-Adresse ermitteln

Um mit C# die IP-Adresse des benutzten Computers im lokalen Netzwerk zu ermitteln, müssen wir zuerst System.Net mittels using einbinden:

using System.Net;

Dann erstellen wir eine Instanz der Klasse IPHostEntry, welche Adressinformationen für Internethosts speichert, an und legen den eigenen PC als Host fest:
IPHostEntry Host = Dns.GetHostEntry(Dns.GetHostName());

In der Eigenschaft AddressList sind nun alle verfügbaren IP-Adressen des Hosts gespeichert, ganz einfach kann man so die lokale IP-Adresse auslesen über:

string IPAddress = Host.AddressList[0].ToString();

Sind im Computer aber mehrere Netzwerkadapter oder Verbindungen vorhanden, sind in der Liste mehrere IP-Adressen gespeichert (z.B. gibt es heutzutage IP6- neben den alten IP4- Adressen, eine WLAN - Verbindung benutzt eine andere IP als eine LAN - Verbindung zu einem anderen Router, usw.).
Möchte man alle IP-Adressen ermitteln, kann man durch die Liste durchiterieren.
Hier der vollständige C# - Code:

IPHostEntry Host = Dns.GetHostEntry(Dns.GetHostName());
foreach (IPAddress IP in Host.AddressList)
    MessageBox.Show(IP.ToString());

Kommentare:

  1. ein kleiner Fehler:
    "string IPAdress = Host.AdressList[0].ToString();"
    AdressList -> AddressList

    danke für die Tipps...

    AntwortenLöschen
  2. Oh entschuldigung, habe ich wohl übersehen.
    Ist jetzt geändert, danke!

    AntwortenLöschen
  3. Hallo,
    wenn ich meine IP-Adresse auslese erhalte ich immer eine IPv6 Adresse. Wenn ich aber auf wieistmeineip.de gehe steht dort eine IPv4 Adresse. Wieso ist das so? Besitzt mein Router auch eine IP? Wird die IP der gesendeten Daten durch den Router geändert (also auf die des Routers)?

    AntwortenLöschen
  4. Hallo Anonym
    Dein Rechner hat ab Win Vista 1x IPv4 und 1x Ipv6 IP Adresse.
    Es wird eine IPv6 Adresse von deinem Router / Server per DHCP automatisch zugewiesen.
    Wenn du an deinem Rechner auch eine IPv4 Adresse haben möchtest, dann schaltest du das IPv6 Internetprotokoll ab.

    Ja.
    Dein Provider stellt dir eine (noch) IPv4 Adresse bereit womit du dich dann Identifizierst und im Internet surfen darfst.
    Der Router hat 2 IP Adressen für internes Netz und externes Netz wo wir alle Surfen ;-).
    Ein sehr verkürztes Bsp. ( Internes Netz 192.168.x.x ||#Router# || externes Netz - der Rest Welt)
    Und einmal zum Verständnis, es ist wie beim DHL Paketversand, es können auch Pakete verloren gehen ;-).
    Mit dem Befehl tracert domainname kannst du nachverfolgen durch welche Tür/Router dein Paket durchgegangen ist.
    Ich hoffe es hat dir etwas weiter geholfen.

    Gruß
    rockr

    AntwortenLöschen
  5. wie bekomme ich meine externe ip?

    AntwortenLöschen
    Antworten
    1. Meinst du diese?
      http://csharp-tricks.blogspot.de/2010/06/online-wan-ip-adresse-ermitteln.html

      Löschen
  6. Wie bekomme ich die IPv4 und IPv6 Adresse von dem Computer auf dem das Programm läuft?

    Mit diesem Snippet werden mehrere Sachen angezeigt.

    AntwortenLöschen
  7. Huhu...

    Es gibt in der Klasse IPAddress eine Methode, die nennt sich MapToIPv4(). Mit dieser kann die zu einer IPv6 gehörende IPv4 abgefragt werden, etwa so:

    foreach (IPAddress ipAddress in hostInfo.AddressList)
    {
    Console.Write("\nIP Adresse: " + ipAddress.MapToIPv4());
    }

    Gruß, Jan...

    AntwortenLöschen
    Antworten
    1. IPHostEntry hostInfo = Dns.GetHostEntry(HostName);

      Hab ich noch davor vergessen ^^

      Löschen
    2. string HostName = System.Net.Dns.GetHostName();

      natürlich auch, nich mein Tag heut...

      Gruß, Jan...

      Löschen