Lokale IPs rausfinden

Für einen Netzwerkserver, der in regelmäßigen Abständen ein Broadcast verschickt, brauchte ich seine aktuelle IP-Adresse. Es gibt im Internet mehrere Tutorials, die sich damit beschäftigen, aber der typische Weg ist beim DNS nach seinem eigenen Hostnamen zu fragen.

Ideal ist das nicht, da man typischerweise genau eine Adresse bekommt. Allerdings bietet .Net da auch deutlich mehr.

Da man unter Umständen nicht nur eine IPv4-Adresse sondern auch andere Adressen bekommen möchte, und auch alle IP-Adressen aller Interfaces bekommen möchte, kann man die Klasse System.Net.NetworkInformation.NetworkInterface fragen. Diese beitet die Methode GetAllNetworkInterfaces() an, die einem alle Netzwerkinterfaces zurückgibt. Diese kann man dann nach ihren jeweiligen Adressen fragen.

GetAllNetworkInterfaces() gibt einem eine Liste aller Netzwerkinterfaces zurück. Diese haben jeweils eine Methode GetIPProperties() und das dabei zurückgegebene Objekt die Property UnicastAddresses. Über die zurückgegebene Collection kann man dann iterieren oder mit LINQ eine Abfrage erstellen.

var ifs = NetworkInterface.GetAllNetworkInterfaces();
List<IPAddress> adresses = new List<IPAddress>();

foreach (var i in ifs)
{
	System.Diagnostics.Debug.WriteLine
		(i.Name + "\n=============================");
	var z = i.GetIPProperties().UnicastAddresses.ToList();
	var y = from item
		in z
		where item.Address.AddressFamily
			== AddressFamily.InterNetwork
		select item.Address;
	adresses.AddRange(y);
	foreach (var item in y)
	{
		System.Diagnostics.Debug.WriteLine
		(item.ToString());
	}
	System.Diagnostics.Debug.WriteLine("\n");
}

Dieses kleine Code-Snippet gibt einem alle lokalen IPv4-Adressen in der Debug-Konsole aus. Um z.B. alle IPv6-Adressen auszugeben ändert man die where-Klausel in

where item.Address.AddressFamily
	== System.Net.Sockets.AddressFamily.InterNetworkV6

Wenn man den Filter wegläßt, bekommt man alle unterstützten Adressen, das will man aber normalerweise nicht.

 


per E-Mail verschicken

Trackbacks

    Keine Trackbacks

Kommentare

Ansicht der Kommentare: (Linear | Verschachtelt)

    Vielen Dank für diesen Beitrag, endlich mal eine Alternative zur Abfrage via DNS!
    #1 Stephan am 02.11.2009 16:08 (Antwort)
    Danke :-)
    #1.1 Justus am 02.11.2009 16:14 (Antwort)

Kommentar schreiben


HTML-Tags werden in ihre Entities umgewandelt.
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.