Client-IP an Server schicken

  • Hi. Ich möchte eine Serversoftware auf meinem Rechner auch von außerhalb ansprechen können, Beispielhaft einen Teamspeak-Server oder sonst was. Dazu sind Änderungen an den Einstellungen im Router nötig, das ist mir klar, aber um erstmal nur meine Internet-IP zu publizieren, brauche ich das noch nicht. Dennoch tut von meinem Script scheinbar gar nichts.
    Die Funktionsweise ist einfach. Alle 30 Sekunden oder so überprüft das im Hintergrund laufende Tool, ob die Online-IP noch dieselbe ist wie vor 30 Sekunden. Ist das nicht der Fall, wird sie an ein php-Script per GET üübermittelt, welches diese geänderte IP in eine Textdatei speichert. Damit ich Statistiken zur Fehlerbetrachtung, zur Verfügbarkeit etc. habe und um heruaszubekommen, wie oft sich die IP ändert, speichere ich diese Daten in Log-Dateien. Haken: Nichtienmal das passiert. Ich weiß nicht, ab welcher Stelle mein Script nicht tut, Log-Dateien werden keine erstellt, weder serverseitig, noch clientseitig.

    Hier die Quellcodes:

    Spoiler anzeigen
    [autoit]

    #include <Inet.au3>
    #include <IE.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $PublicIP = _GetIP()
    $oIE = _IECreate ( "www.meineseite.de/dynipservice.php?ip="&$PublicIP, 0, 0, 1, 0 )
    _IEQuit ( $oIE )
    $file = FileOpen(@YEAR&"\"&@MON&"\"&@MDAY&"\log.txt", 1)
    FileWriteLine($file, @HOUR&":"&@MIN&":"&@SEC&" - IP-Adresse: "&$PublicIP)
    FileClose($file)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep(15000)
    $newPublicIP = _GetIP()
    If $newPublicIP <> $PublicIP Then
    $PublicIP = $newPublicIP
    $oIE = _IECreate ( "www.meineseite.de/dynipservice.php?ip="&$PublicIP, 0, 0, 1, 0 )
    _IEQuit ( $oIE )
    $file = FileOpen(@YEAR&"\"&@MON&"\"&@MDAY&"\log.txt", 1)
    FileWriteLine($file, @HOUR&":"&@MIN&":"&@SEC&" - IP-Adresse hat sich geändert! Neue IP-Adresse in nächster Zeile.")
    FileClose($file)
    EndIf
    $file = FileOpen(@YEAR&"\"&@MON&"\"&@MDAY&"\log.txt", 1)
    FileWriteLine($file, @HOUR&":"&@MIN&":"&@SEC&" - IP-Adresse: "&$PublicIP)
    FileClose($file)
    WEnd

    [/autoit]

    Und hier serverseitig die PHP-Datei, die einkommende Anfragen bearbeitet:

    Einmal editiert, zuletzt von Weisgarnix (24. Mai 2011 um 23:25) aus folgendem Grund: erledigt ;)

  • Hallo
    Ersteinmal wird die IP meistens nur jeden Tag einmal erneuert :D . Ich denke dein Fehler liegt am IE. Mach das ganze mal mit INetGet().
    MfG AntiSpeed

    Nur keine Hektik - das Leben ist stressig genug

  • So? passiert nach wie vor gar nichts :(

    [autoit]

    #include <Inet.au3>
    #include <IE.au3>

    [/autoit][autoit][/autoit][autoit]

    $PublicIP = _GetIP()
    INetGet("http://weisgarnix.bplaced.net/armin/dynip/dynipservice.php?ip="&$PublicIP)
    $file = FileOpen(@YEAR&"\"&@MON&"\"&@MDAY&"\log.txt", 1)
    FileWriteLine($file, @HOUR&":"&@MIN&":"&@SEC&" - IP-Adresse: "&$PublicIP)
    FileClose($file)

    [/autoit][autoit][/autoit][autoit]

    While 1
    Sleep(15000)
    $newPublicIP = _GetIP()
    If $newPublicIP <> $PublicIP Then
    $PublicIP = $newPublicIP
    INetGet("http://weisgarnix.bplaced.net/armin/dynip/dynipservice.php?ip="&$PublicIP)
    $file = FileOpen(@YEAR&"\"&@MON&"\"&@MDAY&"\log.txt", 1)
    FileWriteLine($file, @HOUR&":"&@MIN&":"&@SEC&" - IP-Adresse hat sich geändert! Neue IP-Adresse in nächster Zeile.")
    FileClose($file)
    EndIf
    $file = FileOpen(@YEAR&"\"&@MON&"\"&@MDAY&"\log.txt", 1)
    FileWriteLine($file, @HOUR&":"&@MIN&":"&@SEC&" - IP-Adresse: "&$PublicIP)
    FileClose($file)
    WEnd

    [/autoit]
  • Moin Armin.

    Also wenn ich mir Dein Script ansehe, würde ich sagen, das Du an
    "http://weisgarnix.bplaced.net/armin/dynip/dynipservice.php?ip="
    die IP senden möchtest. Richtig?
    Der "armin" im Link meine ich sagt wo das Problem ist. Du möchtest
    was AUF dem SERVER bzw. in Dein Webspace speichern/verändern und dazu mußte Du
    Benutzername und Passwort angeben.
    Wenn ich mich irre, sorry.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Ich begreife nicht 100% was du machen willst.
    Aber es wäre sicher einfacher sich ne DNS zuzulegen das im router einzutragen und dan mit TCPNametoIP zu arbeiten.

  • warum so umständlich? die clients sollten sich alle bei dir melden...
    das heißt du brauchst nur einen (deinen) pc mit direkten netzzugang und alle clients verbinden sich zu deinem server

    ansosnten... was heißt es passiert garnichts? was geht und was geht nicht?
    bist du sicher, dass du alle 15 sekunden eine neue logfile anlegen willst? warum nicht in ein logfile immer neue einträge mit datum reinschreiben?

  • Um deine IP zu publizieren solltest du einen Service für dynamicDNS wie z.B. DynDNS, selfhost, createnic verwenden.

    Falls du das Client-Programm selbst erstellen willst, sollte die Abfrage nur etwa alle halbe Stunde erfolgen und nach einem Verbindungsabbruch.

  • Ui, ganz schön viele Antworten, Danke dafür erstmal ;)

    Einen Login bzw. ein Passwort zum Aufrufen derSeite brauche ich/braucht man nicht. Die log-Dateien auf dem Server ("ip.txt" und "log.txt") sind mit chmod 777 ausgestattet, daran liegt es also auch nicht.

    Eine DNS kostet Geld und nicht jeder Router unterstützt das.

    Ich habe defakto nur einen Client, daher ist auch eine weitere Unterscheidung nicht notwendig. Dieser verbindet sich mit dem Server, also ruft das php-Script auf dem Server auf, falls die IP eine andere ist, als sie es noch vor 15 Sekunden war. Das Intervall sollte nicht zu groß sein, um einen möglichst nahtlosen Übergang herzustellen bei einem IP-Wechsel.
    Das mit dem Datum usw. dachte ich, wäre praktisch, da ich so, wenn ich weiß, wann es zu Fehlern kam, direkt nachschauen kann und weiß, wo das ist. Ich habe nicht vor, das System dann geplant alle paar Tage zu warten, und wollte auch keine Log-Dateien von MB-Größe riskieren :D Was ich genau reinschrieben werde, und wie ich das handhaben werde, kann cih ja noch entscheiden. Momentan pasiert gar nichts, es wird weder Clientseitig, noch serverseitig irgendetwas in die Logdateien geschrieben. Es sieht also fast so aus, als ob das Programm nicht mal bis zur ersten INetGet-Zeile kommt und bereits in der ersten Zeile, "$PublicIP = _GetIP()" versagt, ich weiß nicht weiter, ich finde den/die Fehler nicht.

    Einen DynDNS-Dienst wollte ich umgehen, es geht ja hierbei nicht darum, Möglichkeiten zu finden, wie ich das realisieren soll, sondern den Fehler in meinem Code zu finden. Fast alles gibt es schon, also sollte am besten niemals mehr jemand überhaupt programmieren lernen? :P

    Einmal editiert, zuletzt von Weisgarnix (19. April 2011 um 17:46)

  • _GetIP sollte funktionieren. Was macht diese einfach Skript?

    [autoit]

    #include <Inet.au3>
    $PublicIP = _GetIP()
    MsgBox(0, "IP Adresse", "Deine IP-Adresse lautet: " & $PublicIP)

    [/autoit]

    Eine Log-Datei kann gar nicht erstellt werden, da du vermutlich in nicht existierende Ordner abspeichern willst (Jahr\Monat\Tag) Diese musst du zuerst erstellen (oder das entsprechende Flag bei FileOpen setzen)

    Übrigens kannst du auch InetRead verwenden. Damit kannst du das Ergebnis deines Skripts auch auslesen.
    Um bplaced über die Inet-Funktionen ansprechen zu können, musst du einen eigenen UserAgent wählen. Der AutoIt-Agent ist gesperrt, weil viele den Webspace missbraucht haben.

    Einen DynDNS-Dienst wollte ich umgehen, es geht ja hierbei nicht darum, Möglichkeiten zu finden, wie ich das realisieren soll, sondern den Fehler in meinem Code zu finden. Fast alles gibt es schon, also sollte am besten niemals mehr jemand überhaupt programmieren lernen? :P


    Ich sag ja nichts dagegen, so etwas zu schreiben. Wenn du aber einen TS3-Server anbieten willst, ist DynDNS viel praktischer. Dann gibt der Nutzer die DynDNS-Addresse ins Serverfeld ein und muss sich nicht mehr darum kümmern. Machst du das über deinen Webspace, muss der Nutzer jeden Tag die IP neu kopieren.

    2 Mal editiert, zuletzt von progandy (19. April 2011 um 17:55)

  • Dein Problem liegt würd ich mal behaupten schon auf der PHP / Server Seite. Teste doch mal dein PHP Script von Hand, da bekommt man folgendes zurück:


    Code
    Aufruf der url: http://weisgarnix.bplaced.net/armin/dynip/dynipservice.php?ip=23.12.12.12
    Parse error: syntax error, unexpected ')' in /users/weisgarnix/www/armin/dynip/dynipservice.php on line 2
  • Irgendwie kapier ich das ganze Problem nicht. Warum benutzt du in PHP nicht einfach folgendes:

    SQL
    echo $_SERVER['remote_addr'];


    Schließlich kennt der Server deine IP eh schon, weil er mit dir verbunden ist (logisch, oder?)
    Anschliessend bastelst du noch ein kleines Passwort in die GET-Parameter ein und überprüfst mit ner IF-Kontruktion, ob das Passwort auch richtig ist.
    Danach kannst du t.B. mit Autoit einfach _InetGetSource("deineseite.de?pass=hallo") aufrufen und ein PHP skript schreiben, welches die IP abspeichert.
    Hoffe ich habe das Problem nicht falsch verstanden.
    @night@

  • Wie täusche ich einen anderen User-Agent vor?


    Vortäuschen tust du gar nichts. Setze ihn einfach auf etwas wie "IPUpdaterXYZ 0.9" oder so. Dazu gibt es eine Funktion namens HttpSet...

  • Okay, ich habe fertig und es funzt ;)
    Client (autoit):

    Spoiler anzeigen
    [autoit]

    #include <Inet.au3>

    [/autoit] [autoit][/autoit] [autoit]

    HttpSetUserAgent("DynIPService v1.0")
    $adress = IniRead("settings.ini", "settings", "adress", "http://weisgarnix.bplaced.net/armin/dynip/dynipservice.php")
    $password = IniRead("settings.ini", "settings", "password", "blablabla")
    $PublicIP = _GetIP()
    $result=BinaryToString(InetRead($adress&"?pw="&$password&"&action=change"))
    $file = FileOpen(@YEAR&"\"&@MON&"\"&@MDAY&"\log.txt", 9)
    FileWriteLine($file, @HOUR&":"&@MIN&":"&@SEC&" - IP-Adresse: "&$PublicIP)
    FileClose($file)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep(15000)
    $newPublicIP = _GetIP()
    If $newPublicIP <> $PublicIP Then
    $PublicIP = $newPublicIP
    $result=BinaryToString(InetRead($adress&"?pw="&$password&"&action=change"))
    $file = FileOpen(@YEAR&"\"&@MON&"\"&@MDAY&"\log.txt", 9)
    FileWriteLine($file, @HOUR&":"&@MIN&":"&@SEC&" - "&$result)
    FileClose($file)
    EndIf
    $file = FileOpen(@YEAR&"\"&@MON&"\"&@MDAY&"\log.txt", 9)
    FileWriteLine($file, @HOUR&":"&@MIN&":"&@SEC&" - IP-Adresse: "&$PublicIP)
    FileClose($file)
    WEnd

    [/autoit]

    Server (php):

    Spoiler anzeigen

    Falls jemand weiß, wie ich den Zugriff auf die ip.txt von außerhalb unterbinden kann (und auf die log.txt), vermulich per htaccess, immer her damit :D