Raspberry No IP autologin Script.. HILFE

  • Hallo zusammen,


    ich habe folgendes Anliegen und erbitte hierbei um freundliche Unterstützung. Ich besitze ein Raspberry der an meine Time Capsula von Apple angeschlossen ist. Der Raspberry dient für mich nur dazu, dass ich von extern auf die Time Capsulle zugreifen kann. Die Einrichtung eines Host bei NO IP habe ich vor ca. 1 Jahr durchgeführt und auch die Hinterlegung mittels Script zur automatisierten Aktualisierung der IP Adresse zum HOST-Name von No IP.


    Ehrlich gesagt habe ich damals dafür eine halbe Ewigkeit gebraucht. Ich selber kenne mich damit überhaupt nicht aus und tue mich sehr schwer das zu verstehen.


    Nun ist es seit ca. 3 Monaten so, dass ich mich immer manuell bei No IP einloggen muss, damit der host nicht deaktiviert wird alle 30 Tage. Hier im Forum habe ich gelesen, dass es die Möglichkeit gibt dies automatisiert durch Raspberry erledigen zu lassen.


    Gerne würde ich euch um eine Schritt für Schritt Anleitung bitten, sodass ich als absoluter Null Checker in diesem Themengebiet es auch durch führen kann.
    tatsächlich von Anfang an bitte. Raspberry wird eingeschaltet was dann..... :)


    Ich würde mich hier über eure Unterstützung freuen. Danke


  • ... ich mich immer manuell bei No IP einloggen muss, ...


    Teste mal mit z. B. ob aus dem Terminal/Konsole, mit:

    Code
    1. curl -u <username>:<password> "http://dynupdate.no-ip.com/nic/update?hostname=<Hostname>"


    , das mit einem manuellen Einloggen bei NO-IP, gleichwertig ist. username, password und Hostname (ohne die spitzen Klammern) musst Du entsprechend deinem Account eintragen/verwenden.

  • llutz : In dem Thread gibt es ein Script zur automatisierten Anmeldung, was ich selber laufen habe und bisher keine Probleme hatte.


    rpi444 : Bei NO-IP wird ein Update von einem Login unterschieden: Ein Update reicht nicht aus.



    Es geht dabei um folgendes Script: http://codepad.org/1exUXzQn


    Code
    1. 0 5 29 * 0 /usr/bin/python $HOME/noipAutoLogin.py -u login -p pass >/dev/null 2>&1

    Ihr müsstet "login" und "pass" mit euren Zugangsdaten ersetzen.
    Wichtig bei der Parameterübergabe sind mögliche Sonderzeichen wie zB. $ oder ä usw. Falls ihr Sonderzeichen habt müsst ihr die Werte mit einer einfachen ' umschließen also zum Beispiel:

    Code
    1. 0 5 29 * 0 /usr/bin/python $HOME/noipAutoLogin.py -u login -p 'p$ss' >/dev/null 2>&1


    Alternativ kann man den Intervall aber natürlich auch kürzer einstellen - wichtig ist nur das es kein Sinn macht das Script weniger als 1x pro Tag auszuführen, ist der Intervall zu kurz kann - genau so wie beim Update-Script - das zur Sperrung des Accounts/Hosts führen.

    Code
    1. 0 5 * * 0 /usr/bin/python $HOME/noipAutoLogin.py -u login -p pass >/dev/null 2>&1

    Für jeden Sonntag um 05:00 Uhr, also ein mal pro Woche.


    Ihr müsst das Anmelde-Script nicht als root ausführen. Wenn ihr es als Benutzer ausführt wird im selben Verzeichnis wo das Script liegt auch eine Logdatei erzeugt: noipAutoLogin.log


    Zusätzlich zu diesem reinen Anmelde-Script benötigt ihr aber natürlich auch noch etwas um eure Host zu aktualisieren. Ob das über ein Script oder euren Router geschieht ist zwar relativ egal, ich empfehle euch aber ein Script zu nutzen ;)


    [hr]


    Hin und wieder kann es vorkommen das NO-IP etwas auf der Loginseite ändert. Im Script wird eine wichtige Zeile überprüft ob der Login erfolgreich war: Zeile 25

    Code
    1. target = "<title> My No-IP"

    Falls ihr also irgendwann ein mal Probleme haben solltet dann meldet euch manuell an, lasst euch den Seitenquelltext anzeigen und sucht nach <title>...


  • llutz : In dem Thread gibt es ein Script zur automatisierten Anmeldung, was ich selber laufen habe und bisher keine Probleme hatte.


    Die automatische Anmeldung funktioniert auch, trotzdem bekommen viele User (mein Test-Host auch) all-monatlich die Aufforderung den Host zu bestätigen (wie auf deren Webseite und Einschränkungen des Free-Accounts auch angegeben). Da darf man dann den Link klicken, Captcha beantworten und wieder 29 Tage warten.
    Drum weiterhin mein Tipp: macht euer eigenes ddns oder fragt einen versierten Kumpel, ob er es für euch einrichtet.

    "Wenn du nichts zu sagen hast, sag einfach nichts!"

  • Die Host zu bestätigen oder den Account, ist ein Unterschied.
    Diese Host-Bestätigung kommt nur dann zur Geltung wenn eben 30 Tage lang kein Update durchgeführt wurde, NO-IP löscht die Host dann aber der Account bleibt bestehen - es sei denn es erfolgte auch kein Login...
    Wer eine statische IP hat der muss alle 30 Tage ein Update erzwingen. Auch dafür gibt es Lösungen via Script ;)
    Router führen nur ein Update durch wenn sich die Host-IP von der Internet-Anschluss-IP unterscheidet.

  • meigrafd :
    Vielen Dank für die Erklärung. Ich sitze gerade nicht vor dem Raspberry. Versuche es aber am Wochenende durchzuführen. Ich habe jedoch noch Verständnis fragen:


    Das speichert man sich zum Beispiel im Benutzerverzeichnis von "pi" mit Dateinamen noipAutoLogin.py: Wie speichert man das ab. Wenn ich mich richtig erinnere gehe ich unter Console und kopiere das Scrippt rein und drücke enter oder?
    Wie kann ich das dann z.B. speichern ?


    Beim ausführen des Scripts muss man die Parameter "-p" fürs Password und "-u" für Username übergeben. Wrrde ich aufgefordet den usernamen und Passwort einzugeben oder muss ich im Script selber überall wo -u und -p auftaucht dort meine Daten eintragen ? Wenn ja bleibt dann das -u stehen z.B. -u maxmueller

  • Du meldest dich an, entweder über SSH oder machst über die Desktopoberfläche ein Terminal auf, führst den Befehl nano noipAutoLogin.py aus, copy&pastest dort den Code rein, drückst STRG+X gefolgt von y und Enter und das wars ;)


    Du musst so wie beschrieben die Parameter übergeben. Er fragt dich nicht danach.
    Beispielsweise ist "ls" ein Befehl und "-la" ein Parameter. Parameter werden durch Leerzeichen getrennt. Vollständig wäre das also "ls -la"

  • meigrafd :


    Sorry das ich mich so doof anstelle. Aber so richtig kapiere 8ich es nicht. In dem script selber sind viele dinge rot gecshriben die als Erklrung diesnen. Kopiert das mit oder muss man das löschen.


    Angenommen mein username ist said780 und mein Paswort hallo: Muss ich dann das Script wie folgt anpassen und kann es dann einfach so in den terminal kopieren:


    #!/usr/bin/python


    import urllib
    import urllib2
    import cookielib
    import getopt
    import sys
    import logging
    import os


    def logme(method, message):
    # print on console if there is one attached
    if os.isatty(sys.stdin.fileno()):
    print message
    # log in logfile
    method(message)


    def getHiddenRandHTMLResponse(response):
    target = "<input type=\"hidden\" name=\"_token\" value=\""
    targetresponse = "<div id=\"sign-up-wrap\""
    parsedres = response[response.find(targetresponse):len(response)]
    return parsedres[parsedres.find(target)+len(target):parsedres.find(target)+len(target)+40]


    def checkLogin(response):
    target = "<title> My No-IP"
    if response.find(target) == -1:
    return False
    return True


    def usage():
    print "usage: ./noipAutoLogin [options]"
    print ""
    print "options:"
    print "-h, --help show this help message and exit"
    print "-u said780, --username set your NoIP login_username"
    print "-p hallo, --password set your NoIP login_password"
    print ""
    print "example:"
    print "./noipAutoLogin -u said780 -p hallo"


    class HTMLSession:
    cj = None
    opener = None
    txHeaders = None

    def __init__(self, txHeaders):
    #The CookieJar will hold any cookies necessary throughout the login process.
    self.cj = cookielib.MozillaCookieJar()
    self.txHeaders = txHeaders
    self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cj))
    urllib2.install_opener(self.opener)


    def setHeaders(self, txHeaders):
    self.txHeaders = txHeaders


    def getHeaders(self):
    return self.txHeaders


    def openURI(self, uri, txdata):
    try:
    req = urllib2.Request(uri, txdata, self.txHeaders)
    # create a request object


    handle = urllib2.urlopen(req)
    # and open it to return a handle on the url


    except IOError as e:
    logme(logging.error,'Open failure on "%s"' % uri)


    if hasattr(e, 'code'):
    logme(logging.error,'Error code - %s' % e.code)
    elif hasattr(e, 'reason'):
    logme(logging.error, "Reason code - %s" % e.reason)
    logme(logging.error, "This usually means the server doesn't exist,'")
    logme(logging.error, "is down, or there is no internet connection.")
    return None
    else:
    return handle.read()


    def main(argv):
    username = ""
    password = ""

    logfile = "/var/log/noipAutoLogin.log"

    if not os.geteuid() == 0 or not os.access(logfile, os.W_OK):
    logfile = "./noipAutoLogin.log"

    theurl = "https://www.noip.com/login"
    thelogouturl = "https://www.noip.com/logout"
    txheaders = {'User-agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'}
    # fake a user agent, some websites (like google) don't like automated exploration
    logging.basicConfig(filename=logfile,level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s', datefmt='%Y/%m/%d %H:%M:%S')


    try:
    opts, args = getopt.getopt(argv, "hu:p:", ["help", "username=","password="])
    except getopt.GetoptError:
    usage()
    exit(2)


    if len(opts) == 0:
    usage()
    exit(2)

    for opt, arg in opts:
    if opt in ("-h", "--help"):
    usage()
    exit(2)
    elif opt in ("-u" said780, "--username"):
    username = arg
    elif opt in ("-p" hallo, "--password"):
    password = arg


    myhtmlsession = HTMLSession(txheaders)
    response = myhtmlsession.openURI(theurl, None)
    if response == None:
    logme(logging.error,'Connect failed')
    sys.exit(42)


    hiddenval = getHiddenRandHTMLResponse(response)
    txdata = urllib.urlencode({'username':username, 'password':password, 'Login':"1", 'submit_login_page':"1", '_token':hiddenval, 'Login': "Sign In"})
    response = myhtmlsession.openURI(theurl, txdata)
    if response == None:
    logme(logging.error,'Second connect failed')
    sys.exit(42)

    #we should sleep here for about 10 seconds.
    if checkLogin(response):
    logme(logging.info,'Successfully logged in to NoIP')
    else:
    logme(logging.info,'Login failed')


    response = myhtmlsession.openURI(thelogouturl, None)
    if response == None:
    logme(logging.warn, 'Logout failed')
    sys.exit(21)


    if __name__ == "__main__":
    main(sys.argv[1:])

  • An dem Script selbst veränderst du bitte nichts. Das übernimmst du einfach unverändert 1:1


    Ausführen tust du es dann einfach wie folgt:


    Code
    1. /usr/bin/python $HOME/noipAutoLogin.py -u said780 -p hallo




    PS: Fürs nächste mal bitte CODE verwenden: FAQ => Nützliche Links / Linksammlung => HowTo: CODE / PHP Code im Forum posten


  • Die Host zu bestätigen oder den Account, ist ein Unterschied.
    Diese Host-Bestätigung kommt nur dann zur Geltung wenn eben 30 Tage lang kein Update durchgeführt wurde, NO-IP löscht die Host dann aber der Account bleibt bestehen - es sei denn es erfolgte auch kein Login...
    Wer eine statische IP hat der muss alle 30 Tage ein Update erzwingen. Auch dafür gibt es Lösungen via Script ;)
    Router führen nur ein Update durch wenn sich die Host-IP von der Internet-Anschluss-IP unterscheidet.


    Und trotz Anmeldung und erzwungenem IP-Update (Wechsel zwischen echter und Fake-IP) bekommen viele Leute, interessanterweise anscheinend nicht alle, die Bestätigungsaufforderung.
    Das sieht man auch, wenn man sich dann wirklich bei noip.com einloggt:
    - 13 hostname updates in the past 30 days
    - Last Login Aug 15, 2016 ....

    "Wenn du nichts zu sagen hast, sag einfach nichts!"

  • Die Daten auf der Loginseite werden erst beim nächsten reload der Seite aktualisiert. Siehe dazu auch letzte Sätze > dieses Beitrags <


    BTW: Wenn du 13 Hostnames hast dann hast Du keinen Free-Account ;)


    Du kannst das Script ja mal debuggen und dir an gewissen Stellen die Ausgabe anzeigen lassen. Ein Login erfolgt auf jeden Fall, weshalb mir bisher nicht klar ist wieso es Manuell funktioniert aber nicht via Script? :s Erklär Du mir bitte mal worin da der Unterschied sein sollte? Wie sollte die Loginseite erkennen ob das ein echter Mensch oder ein Script ist?


  • BTW: Wenn du 13 Hostnames hast dann hast Du keinen Free-Account ;)


    Nur zu deinem Verständnis:
    Die Übersetzung von "13 hostname updates in the past 30 days" ins Deutsche lautet:
    "13 Aktualisierungen des (1) Hostnamen während der letzten 30 Tage"
    oder noch einfacher:
    " 1 Hostname wurde im letzten Monat 13 mal aktualisiert"

    "Wenn du nichts zu sagen hast, sag einfach nichts!"

  • Das hat auch nichts mit der Aktualisierung der IP zutun ;) Wir bekommen durch die gute alte IPV4 noch jeden Tag eine neue IP und trotzdem muss man alle 30 tage die eine minute verschenken ( was ja nun echt nicht viel ist). Ob man sich einloggt (um z.b. nach der IP zu gucken auf der Website) oder einfach nur das Programm nutzt welches in regelmäßigen abständen die ip kontrolliert macht da keinen unterschied bei den 30-Tagen-Free-Account-Bestätigungs-Gedöns.

    :shy: Legastheniker :shy:


    wer fehler findet darf nachsicht haben


    Klick>Youtube Channel<Klick

  • @maigrafd:
    ich habe es doch jetzt zu Hause ausprobiert. Ich habe mich über ssh mit dem mac im terminal auf den raspberry angemeldet und dann so wie von dir beschrieben alles gemacht.


    Zuerst den Befehl im terminal ausgeführt:
    nano noipAutoLogin.py


    Danach das Script eingefügt und gespeichert


    Danach folgendes ausgeführt:(Natürlich mit den richtigen logindaten)
    /usr/bin/python $HOME/noipAutoLogin.py -u said780 -p hallo


    Hier habe ich auch die Meldung erhalten erfolgreich bei nopp eingelegt :)


    Dan habe ich noch folgendes im terminal gemacht:
    crontab -e


    Dort hatte ich bereits zwei Sachen drin steht und unter den zwei Sachen habe ich dann folgendes reimkopiert und gespeichert.
    0 5 * * 0 /usr/bin/python $HOME/noipAutoLogin.py -u login -p pass >/dev/null 2>&1


    Somit müsste doch jetzt alles laufen oder. Was ist wenn der raspberry mal vom Strom getrennt wird. Startet er dann das trotzdem jeden Sontag weil der crontab gesetzt wurde ?


  • Somit müsste doch jetzt alles laufen oder. Was ist wenn der raspberry mal vom Strom getrennt wird. Startet er dann das trotzdem jeden Sontag weil der crontab gesetzt wurde ?


    Die crontab kann nur laufen wenn der Pi an ist. Wie oft er bis Sonntag um 5 Uhr neu startet ist aber nebensächlich

  • ok. cool. dann schau ich mal nach 31 Tagen ob meine Host bei Noip deaktiviert worden ist, oder ob jetzt alles super funktioniert.


    Dir wollte ich jedenfalls recht herzlichst danken für die Unterstützung.


    Danke!!

  • meigrafd :
    Hallo,
    ich hab da noch mal eine Nachfrage. :) ich habe heute mal über die Login Seite bei NO IP geschaut wann der letzte Login durchgeführt wurde. nach dem der raspberry ja jetzt so eingestellt wurde, müsste er jeden Sonntag gegen 05:00 Uhr sich einloggen, dann müsste doch bei NOIP der letzte Login für Sonntag angezeigt werden oder?


    Leider steht dort nämlich letzter Login am 18.08. und nicht am 21.08.


    Hab ich vielleicht doch noch was falsch gemacht ?

  • crontab -e


    Dort hatte ich bereits zwei Einträge hinterlegt und unter den zweiten Eintrag habe ich dann folgendes rein kopiert und gespeichert.
    0 5 * * 0 /usr/bin/python $HOME/noipAutoLogin.py -u login -p pass >/dev/null 2>&1
    Automatisch zusammengefügt:
    [hr]
    Musste ich evtl auch hier wo -u steht und -p steht wieder meine Benutzerdaten hinterlegen.

    Edited once, last by said780 ().