Fritzbox: Internet-IP ermitteln



  • Natürlich ist der direkte Weg, die Fritzbox zu befragen, irgendwie erstrebenswert.

    Viele Router können snmp. Das wäre der direkte Weg. Kann Deine Fritzbox das?

    Kommt man per Telnet oder SSH rein? Dann wäre das auch sehr hübsch.

    Natürlich kann man sie per HTTP befragen, aber das bedeutet unter Umständen blödes Passwortgefummle. Einfach mal ausprobieren.

    Oder pushen statt pollen und einen durchlaufenden Rechner die Logs empfagen lassen, sind die syslog-ng-ähnlich?

    Und zuguterletzt nicht als ddns-Dienst einen lokalen Rechner angeben und mitschreiben.

    Aber whatismyip.org ist schon angenehm einfach.



  • Wenn der Router UPnP kann und aktiviert hat:
    http://upnp.org/specs/gw/UPnP-gw-WANIPConnection-v1-Service.pdf
    "2.2.11.ExternalIPAddress - This is the external IP address used by NAT for the connection."

    Es ist aber definitiv einfacher einen Server (also sowas wie whatismyip.com nach der eigenen IP zu befragen, zudem funktioniert das quasi mit jedem Router 😉



  • Deine Fritz!Box 6360 Cable ist offenbar ein sehr neues Modell. Deshalb dürfte dein Vorhaben relativ einfach (und ohne große Umwege) zu lösen sein.

    Zitat AVM: "Die FRITZ!Box Linie bietet in der aktuellen Ausprägung bereits Unterstützung für Entwicklungsvorhaben von unabhängigen Anbietern. Genutzt werden offene bzw. standardisierte Schnittstellen, die AVM im Rahmen der Systemarchitektur der FRITZ!Box unterstützt."

    Der vollständige Artikel ist auf der Informationseite zu Schnittstellen und Protokollen rund um FRITZ!Box zu finden.



  • So was in die Richtung habe ich gesucht, vielen dank!

    Mit der Anweisung

    curl "http://fritz.box:49000/upnp/control/WANIPConn1" -H "Content-Type: text/xml; charset="utf-8"" -H "SoapAction⚱schemas-upnp-org:service:WANIPConnection:1#GetExternalIPAddress" -d "<?xml version='1.0' encoding='utf-8'?> <s:Envelope s:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'> <s:Body> <u:GetExternalIPAddress xmlns:u="urn:schemas-upnp-org:service:WANIPConnection:1" /> </s:Body> </s:Envelope>" -s | grep -Eo '\<[[:digit:]]{1,3}(\.[[:digit:]]{1,3}){3}\>'

    soll man die externe IP abfragen können. Wie kann ich diese Anweisung in ein C# Programm einbauen? Sry aber ich bin noch Anfänger.



  • Ich bekomme es nicht hin. Kann mir bitte jemand helfen? Muß ich Sockets verwenden? Es gibt im gesamten Internet scheinbar kein Beispiel daß funktioniert. Jedenfalls habe ich keines gefunden. Bin für jeden Tip dankbar.



  • Hier mal ein Bsp mit www.whatismyip.org. Die Fehlerbehandlung habe ich weggelassen.

    using System;
    using System.Net;
    
    namespace Test
    {
        class Program
        {
            static void Main(string[] args)
            {
                using (WebClient client = new WebClient())
                {
                    string s = client.DownloadString("http://www.whatismyip.org/");
                    IPAddress address = IPAddress.Parse(s);
                    Console.WriteLine("My external IP address is {0}.", address);
                }
            }
        }
    }
    

    [EDIT]
    - URI geändert



  • Ich hatte oben schon geschrieben, daß ich eigentlich eine Lösung zur direkten Abfrage über die Fritzbox suche. "whatismyip" gibt es in Netz zuhauf, sie interessieren mich nicht.



  • Falls der Router dynamisch seine IP bezieht (vom Provider).. was hat der denn für eine IP wenn er nicht mit dem Provider verbunden ist?



  • Das weiß ich nicht, weil ich diese Info aus der Fritzbox ja nicht auslesen kann. Wahrscheinlich aber die gleiche Grütze, wie bei "whatismyip" wenn die Box. nicht mit dem Provider verbunden ist.

    ICH MÖCHTE DIE WERTE ÜBER DIE FRITZBOX ABFRAGEN. Das geht wohl irgendwie über UPNP und dafür UND NUR DAFÜR möchte ich bitte einen Lösungsansatz.



  • Orchy schrieb:

    So was in die Richtung habe ich gesucht, vielen dank!

    Mit der Anweisung

    curl "http://fritz.box:49000/upnp/control/WANIPConn1" -H "Content-Type: text/xml; charset="utf-8"" -H "SoapAction⚱schemas-upnp-org:service:WANIPConnection:1#GetExternalIPAddress" -d "<?xml version='1.0' encoding='utf-8'?> <s:Envelope s:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'> <s:Body> <u:GetExternalIPAddress xmlns:u="urn:schemas-upnp-org:service:WANIPConnection:1" /> </s:Body> </s:Envelope>" -s | grep -Eo '\<[[:digit:]]{1,3}(\.[[:digit:]]{1,3}){3}\>'

    soll man die externe IP abfragen können. Wie kann ich diese Anweisung in ein C# Programm einbauen? Sry aber ich bin noch Anfänger.

    Vorausgesetzt, die o.a. fritz.box:49000/upnp/control/WANIPConn1-Anweisung ist korrekt - warum verfütterst du sie nicht an die HttpWebRequest-Klasse und wertest das Ergebnis aus?



  • Orchy schrieb:

    Das weiß ich nicht, weil ich diese Info aus der Fritzbox ja nicht auslesen kann. Wahrscheinlich aber die gleiche Grütze, wie bei "whatismyip" wenn die Box. nicht mit dem Provider verbunden ist.

    ICH MÖCHTE DIE WERTE ÜBER DIE FRITZBOX ABFRAGEN. Das geht wohl irgendwie über UPNP und dafür UND NUR DAFÜR möchte ich bitte einen Lösungsansatz.

    Aha... jetzt verstehe ich es endlich, du willst die Werte direkt bei der Fritzbox abfragen... 🕶
    Mit den Grossbuchstaben wird das um einiges klarer.



  • An theta: Ich glaube nicht wirklich, daß du meine Frage verstanden hast. Sonst hättest du sie ja beantwortet.

    An schmidt-webdesign.net: Hast du vll. ein Beispiel oder einen Link auf ein solchen?


  • Administrator

    Orchy schrieb:

    Das weiß ich nicht, weil ich diese Info aus der Fritzbox ja nicht auslesen kann. Wahrscheinlich aber die gleiche Grütze, wie bei "whatismyip" wenn die Box. nicht mit dem Provider verbunden ist.

    ICH MÖCHTE DIE WERTE ÜBER DIE FRITZBOX ABFRAGEN. Das geht wohl irgendwie über UPNP und dafür UND NUR DAFÜR möchte ich bitte einen Lösungsansatz.

    Ist dir wirklich nicht klar, dass wenn deine Fritbox nicht mit dem Provider verbunden ist, du gar keine WAN IP hast! Da nützt es nichts über SOAP oder SNMP zu gehen, die liefern dir auch nur ein leeres Ergebnis. Der Provider vergibt die IP Adresse an dich. Wenn du keine Verbindung zum Provider hast, hast du keine IP Adresse.

    Daher hat theta deine Frage schon richtig verstanden. Er wundert sich wahrscheinlich eher darüber, dass dir nicht klar zu sein scheint, dass du ohne Provider und somit ohne Internet gar keine Internet IP hast (auch WAN IP genannt).

    Für SOAP gibt es Beispiele wie Sand am Meer. Wenn du schnell auf Wikipedia gehst und dich zu SOAP informierst, merkst du, dass man dies mit XML über HTTP-POST erledigt. Die XML Daten und die URL hast du ja bereits. Wenn du dann ein wenig etwas zur HttpWebRequest Klasse anschaust, vielleicht auch den Namensraum anschaust, dann solltest du ziemlich schnell diese Methode finden:
    WebClient.UploadString

    Damit kannst du nun den XML-String per POST an die URL senden und bekommst eine Antwort. Falls du damit nicht weiterkommst, präsentiere zuerst mal, was du gemacht hast, dann wird dir sicherlich gerne weitergeholfen.

    Grüssli



  • Natürlich ist mir klar, daß wenn ich keine Verbindung zum Provider habe, habe ich auch keine IP Adresse. Dann nützt mir aber "whatismyip" auch nichts!!!

    Auf der Fritzbox-Seite habe diese angeblich funktionierende curl-Anweisung gefunden und möchte wissen, wie ich das in C# schreiben muß. Weißt DU das? Mir reicht ein einfaches JA oder NEIN.



  • Versuch mal dies (ungeprüft!):

    // Funktioniert dieses Programm, hat es Dirk Schmidt (http://schmidt-webdesign.net) geschrieben.
    // Funktioniert es nicht, ist der Autor dieses Programms unbekannt.
    
    using System;
    using System.Net;
    using System.Text;
    using System.Xml;
    
    namespace FritzboxUPnP
    {
        class Program
        {
            static void Main()
            {
                Console.WriteLine(GetExternalIP());
                Console.ReadKey();
            }
    
            private static string GetExternalIP()
            {
                WebRequest request = HttpWebRequest.Create("http://fritz.box:49000/upnp/control/WANIPConn1");
                request.Method = "POST";
                byte[] b = Encoding.UTF8.GetBytes(
                                    "<?xml version=\"1.0\"?>" +
                                    "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"" +
                                    "s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">" +
                                    "<s:Body>" +
                                    "<u:GetExternalIPAddress xmlns:u=\"urn:schemas-upnp-org:service:WANIPConnection:1\"></u:GetExternalIPAddress>" +
                                    "</s:Body>" +
                                    "</s:Envelope>");
                request.Headers.Add("SOAPACTION", "\"urn:schemas-upnp-org:service:WANIPConnection:1#GetExternalIPAddress\"");
                request.ContentType = "text/xml;charset=\"utf-8\"";
                request.ContentLength = b.Length;
                request.GetRequestStream().Write(b, 0, b.Length);
                XmlDocument xdoc = new XmlDocument();
                xdoc.Load(request.GetResponse().GetResponseStream());
                return (xdoc.SelectSingleNode("//NewExternalIPAddress/text()").Value);
            }
        }
    }
    

    Um die Fehlerbehandlung musst du dich selbst kümmern.

    Poste mal, ob es funktioniert ...

    Schönes Wochenende


  • Administrator

    Orchy schrieb:

    Natürlich ist mir klar, daß wenn ich keine Verbindung zum Provider habe, habe ich auch keine IP Adresse. Dann nützt mir aber "whatismyip" auch nichts!!!

    Dann nützt dir aber auch SOAP nichts! Und das ist ja am Ende der Punkt, wieso hier einige wohl ziemlich den Kopf schütteln. Wenn du kein Internet hast, dann bringt es dir nichts, wenn du die FritzBox direkt kontaktierst. Und wenn du Internet hast, dann ist es deutlich einfacher, schnell eine Anfrage an "whatismyip" zu senden. Das Resultat ist schlussendlich dasselbe!
    Wenn du klar sagen würdest, dass du lernen möchtest, wie man das auf andere Wege erreicht, dann hätten hier deutlich mehr Verständnis, aber bisher habe ich nichts dergleichen von dir vornommen, nur kindische Grossbuchstaben und mehrfach Ausrufezeichen.

    Orchy schrieb:

    Auf der Fritzbox-Seite habe diese angeblich funktionierende curl-Anweisung gefunden und möchte wissen, wie ich das in C# schreiben muß. Weißt DU das? Mir reicht ein einfaches JA oder NEIN.

    Auf diese Frage habe ich bereits ausführlich geantwortet, wie du das in C# realisieren kannst. Wenn daran irgendetwas unklar ist, dann frag konkret nach, sonst kann ich dir nicht weiterhelfen. Ein bisschen mitdenken und mitlesen erwarte ich schon von jemandem, der von jemand anderem Hilfe möchte.

    Grüssli



  • Meine Frage hatte ich EINDEUTIG formuliert, nämlich "Fritzbox: Internet-IP ermitteln". Die Postings von Dravere, theta und cooky451 verfehlen dieses Thema und dienen wohl eher dem Zweck, die Anzahl ihrer nutzlosen Beiträge zu erhöhen!!!

    Mein Dank geht an geeky für den uPnP-Tip und ganz besonders an den Poster des Codes Dirk Schmidt (http://schmidt-webdesign.net)!!! Das Beispielprogramm, daß ich noch nicht ganz verstehe, funktioniert tadellos und macht genau das was Volkard so treffend schrieb: "Natürlich ist der direkte Weg, die Fritzbox zu befragen, irgendwie erstrebenswert". Vielleicht bekomme ich es mit diesem Beispiel auch hin, die Fritzbox zu einer Zwangstrennung zu überreden.

    VIELEN DANK AN DIESES FORUM!!!!


Anmelden zum Antworten