BigBastis Blog

C#: Oeffentliche IP Adresse bestimmen

Introduction

user

Sebastian Gross

Sebastian Gross arbeitet in Bielefeld als Softwareentwickler für .NET und Java im Bereich Web.Als Fan der .NET-Plattform lässt er sich kein Userguppen Treffen und Community Event im Raum OWL entgehen.Dabei hat er eine besondere Vorliebe für das ASP.NET MVC Framework und für das Test Driven Development (TDD) entwickelt.


LATEST POSTS

Handling too long scrollspy menus 10th June, 2015

Java: Create ZIP archive 23rd March, 2015

.NET

C#: Oeffentliche IP Adresse bestimmen

Posted on .

Vor einiger Zeit habe ich einen Artikel darüber geschrieben, wie man die Lokale IP Adresse bestimmen kann. Seit dem kamen immer wieder mal Anfragen nach der öffentlichen IP Adresse, also die Adresse, mit der wir durch das Internet unterwegs sind.

Bild 1: Aufbau eines gewöhnlichen Heimnetzwerks

Leider kann man diese IP Adresse nicht so einfach bestimmen, denn sobald ein Router im Spiel ist (und das ist er heutzutage in 98% der Fälle) ist man vom Internet getrennt.

Aber warum kann ich denn nun die öffentliche IP Adresse nicht auslesen?

Wenn ihr Bild 1 mal anschaut, werdet ihr feststellen, dass dieser Haushalt zwei Computer hat, die beide durch den Router in Internet kommen. (Ohne Router würde immer nur ein Computer gleichzeitig im Internet sein können) Aber wir haben vom Router nur eine Verbindung zum Internet. Das bedeutet, dass beide Rechner über die selbe Verbindung im Internet Surfen und auch beide die selbe IP Adresse in Internet haben.

Dies ist möglich, da der Router sich darum kümmert, dass jeder Rechner das bekommt was er will, dieser trennt das eigene Heimnetzwerk von dem öffentlichen Netzwerk (dem Internet) – somit weiß nur der Router welche IP wir nach außen hin haben, wir als einzelner Rechner kennen nur unsere Heimnetzadressen.

Wie kann ich nun meine öffentliche IP herausfinden?

Um dieses Ziel zu erreichen müssen wir uns leider Hilfsmittel bedienen. Die wohl einfachste Lösung ist es eine Seite im Internet danach zu „fragen“ welche IP man hat, denn wenn wir über den Router auf eine Internetseite zugreifen, sieht die Internetseite nur die IP des Routers und das ist auch unsere Öffentliche IP.

Woher bekomme ich dieses Hilfsmittel?

Hier hat man zwei Möglichkeiten, erstens man kennt eine Internetseite die einem die IP Adresse anzeigt, oder man baut sich eine eigene. Denn der Aufwand dafür ist sehr gering, alles was man dafür benötigt ist ein einfaches PHP Skript:

	$ip = getenv("REMOTE_ADDR");
		print $ip;

Dieses Skript macht nichts anderes, als die IP Adresse des Aufrufers anzuzeigen und mehr benötigen wir ja auch nicht!

Dieses Skript speichert ihr nun in einer Datei namens „index.php“ und speichert diese auf eurem Webserver. ACHTUNG: wenn ihr einen kostenlosen Webspace benutzt, kann es sein, dass der Anbieter automatisch bei einem Aufruf eigenen Code in eure Dateien schreibt, um zB. Werbung ein zublenden – ich empfehle euch einen eigenen, bezahlten Webspace zu nutzen oder auf fremde Dienste vertrauen.

Da ich diese Funktionalität auch öfters benötige habe ich mir schon ein solches Skript angelegt, dieses findet ihr unter http://myip.bigbasti.com – diese Adresse könnt ihr auch gerne in euren Programmen nutzen um eure IP zu bestimmen.

Nun müssen wir nur noch dieses Skript in unserem Programm abfragen. Und das geschieht sehr einfach mit einem HttpWebRequest – so als würde man eine ganz normale Webseite aufrufen (was wir ja auch tun!)

        /// Diese Methode liefert durch einen Webrequest die Öffentlich IP Adresse dieses Computers
        /// "provider">Die URL an die der Request gesendet werden soll. Bsp: http://myip.bigbasti.com
        /// returns>String mit der Öffentlichen IP Adresse in Punktnotation oder null bei Fehler
        public static String GetMyPublicIP(string provider)
        {
            try
            {
                HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(provider);
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();

                StreamReader reader = new StreamReader(response.GetResponseStream());

                return reader.ReadToEnd();
            }
            catch (Exception e)
            {}
            return null;
        }

Hier machen wir nichts anderes, als die Webseite auf zurufen, und das was sie ausgibt herunter zuladen und da das Einzige was sie ausgibt unsere IP ist müssen wir nichts mehr machen!

Die obere Funktion könnt ihr zum Beispiel so benutzen:

String myip = GetMyPublicIP(„http://myip.bigbasti.com“);

Im Prinzip gar nicht so komplex, die einzige Unbequemlichkeit bleibt aber natürlich der externe Dienst auf den man sich verlassen muss!

profile

Sebastian Gross

http://www.bigbasti.com

Sebastian Gross arbeitet in Bielefeld als Softwareentwickler für .NET und Java im Bereich Web.Als Fan der .NET-Plattform lässt er sich kein Userguppen Treffen und Community Event im Raum OWL entgehen.Dabei hat er eine besondere Vorliebe für das ASP.NET MVC Framework und für das Test Driven Development (TDD) entwickelt.

Comments
user

Author bigbasti87

Posted at 10:47 12. Mai 2010.

Bloggd: C#: Oeffentliche IP Adresse bestimmen – http://blog.bigbasti.com/eoffentliche-ip

Kommentar verfassen

View Comments (1) ...
Navigation