Neue SLA bei kostenlosen Dyndns Accounts mittels AutoLoginScript umgehen

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Status
Für weitere Antworten geschlossen.
Vielen Dank!!! Geht jetzt bei mir auch wieder!
 
So, einen Monat hats funktioniert. Leider jetzt wieder nicht.
Wenn ich das Skript via sh Befehl ausführe, sagt die Kommandozeile:
Rich (BBCode):
Mediaserver:~# sh /etc/noipAutoLogin
/etc/noipAutoLogin: line 3: import: not found
/etc/noipAutoLogin: line 4: import: not found
/etc/noipAutoLogin: line 5: import: not found
/etc/noipAutoLogin: line 6: import: not found
/etc/noipAutoLogin: line 7: import: not found
/etc/noipAutoLogin: line 8: import: not found
/etc/noipAutoLogin: line 10: syntax error: unexpected "("
Mein Skript
Rich (BBCode):
#!/usr/local/packages/@appstore/Python/usr/local/bin/python

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

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>No-IP Members Portal: Your No-IP</title>"
    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, --username   set your NoIP login_username"
    print "-p, --password   set your NoIP login_password"
    print ""
    print "example:"
    print "./noipAutoLogin -u username -p password"

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:
            print 'we failed to open "%s".' % uri

            if hasattr(e, 'code'):
                print 'We failed with error code - %s.' % e.code
                logging.error('We failed with error code - %s.' % e.code)
            elif hasattr(e, 'reason'):
                print "The error object has the following 'reason' attribute :"
                print e.reason
                print "This usually means the server doesn't exist,'"
                print "is down, or we don't have an internet connection."
                return None
        else:
            return handle.read()

def main(argv):
    username = ""
    password = ""
    logfile = ""
    hiddenval = ""
    theurl = "https://www.noip.com/login"
    thelogouturl = "https://www.noip.com/logout"
    txdata = None
    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()
        logging.warning('Manual login with incorrect parameters')
        exit(2)
    for opt, arg in opts:
        if opt in ("-h", "--help"):
            usage()
            exit(2)
        elif opt in ("-u", "--username"):
            username = arg
        elif opt in ("-p", "--password"):
            password = arg

    myhtmlsession = HTMLSession(txheaders)
    response = myhtmlsession.openURI(theurl, None)
    if response == None:
        sys.exit(0)

    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:
        sys.exit(0)
    
    #we should sleep here for about 10 seconds.
    if checkLogin(response):
        print 'We have succesfully logged into NoIP.'
        logging.info('We have succesfully logged into NoIP.')
    else:
        print 'Login failed'
        logging.info('Login failed')

    response = myhtmlsession.openURI(thelogouturl, None)
    if response == None:
        sys.exit(0)

if __name__ == "__main__":
    main(sys.argv[1:])
Ich habe die Pakete Python 3 und 2.7 aus den offiziellen installiert.
 
Zuletzt bearbeitet:
Also ich kann Dir schon mal sagen , dass es bei mir immer noch 100% funktioniert. Keine Probleme. Ebend noch mal ausgeführt.
 
könnt ihr eure plugins mal posten? dann mach ich das bei mir nochmal neu und sage dann bescheid.
 
Hi
also am script liegts nicht, das funzt sowol bei mir als auch bei den anderen wie man sieht.
gibt es einen grund warum du es mit "sh" aufrufst und nicht mit der bash? ... könnte vl schon daran liegen.
wenn das nicht hilft probier mal in der ersten zeile in deinem script ganz am ende python2.7 hinzuschreiben anstatt nur python.

gruß
 
Zuletzt bearbeitet:
Danke für den Tipp. Mit sh muss ich es aufrufen, weil auf meiner DS standardmäßig kein bash ist. python2.7 sowie python habe ich beides ausprobiert, kommt immernoch der gleiche fehler. Muss es eigentlich ausführbar sein?
 
also prinzipiell würd ich sagen ja, es muss ausführbar sein ... aber
der fehler zeigt ganz klar bei dir das es ausgeführt wird. die fehlermeldung kommt ja von sh und sagt das sh den ausdruck "import" nicht kennt.
der fehler liegt in der methode des aufrufens. du rufst das script mit sh auf und erzwingst quasi ein ausführen des scripts mit sh. wir wollen aber das script mit python ausführen!

probier doch mal folgendes:
Mediaserver:~# /etc/noipAutoLogin

gruß
 
hilft irgendwie alles nix.
Mediaserver:~# /etc/noipAutoLogin
-ash: /etc/noipAutoLogin: Permission denied
Mediaserver:~# su /etc/noipAutoLogin
su: unknown user /etc/noipAutoLogin
Mediaserver:~# sudo /etc/noipAutoLogin
-ash: sudo: not found
 
Für den Login den User root und Password vom admin benutzt?
 
probier mal ein
Mediaserver:~# chmod 755 /etc/noipAutoLogin
Mediaserver:~# /etc/noipAutoLogin

gruß
 
@ QTip: danke, ja hab ich gemacht. (btw. in der Konsole zeigt das # immer root an, während $ immer user ist)
@3x3cut0r:
Mediaserver:~# chmod 755 /etc/noipAutoLogin
Mediaserver:~# /etc/noipAutoLogin
We have succesfully logged into NoIP.
thx! keine Ahnung warum es plötzlich mit veränderten Rechten geht, der root müsste doch auch ohne 755 was machen können oder?
Jetzt geht es sogar im Aufgabenplaner wieder. Lag wohl daran dass es nicht ausführbar war.
 
Zuletzt bearbeitet:
Hallo zusammen, seit Montag habe ich nach vielen Ausrutschern bei Konkurrenten nun endlich auch den weg zur Synology gefunden und habe mir eine DS214play gegönnt. Bin was ich bissher gesehen habe extrem zufrieden mit dem Teil, die möglichkeiten scheinen Grenzenlos, also habe ich mich in euer Wiki gelesen und dieses Script gefunden. Seit Dienstag habe ich Stunden daran gesessen und ich wollte dieses Script einfach zum laufen kriegen, ohne irgendwelche Hilfe, so ala Learning by Doing. Mittlerweile habe ich die Segel aber auf halbmast gesenkt und bin kurz vor dem Aufgeben.

Meine DS läuft auf der neusten DSM 5.1-5021 Update 2 Version, da habe ich das Paket "Python Module" installiert, da es im Wiki ausdrücklich hiess, dass dies nicht mit der 3er Version funktioniert. Script kopiert, angepasst (Inklusive der Phyton Weiterleitung), hochgeladen und die erste Ernüchterung kam ziemlich schnell. Es ging nichts. Mich an die im Wiki eingetragene "Häufige Fehler" gemacht und da dann festgestellt dass mein Phyton nicht im Angegebenen Ordner sitzt. Habe per putty die Ordner durchsucht und auch gefunden "#/volume1/@appstore/PythonModule/usr/lib/python2.7" nur habe ich jeden Haupt-/Unterordner mal angegeben. das Resultat ist aber immer dass gleiche:

Rich (BBCode):
DiskStation> /volume1/install/scripts/ddnsAutoLogin
-sh: /volume1/install/scripts/ddnsAutoLogin: not found

mit SH ausgeführt kommt:

Rich (BBCode):
DiskStation> sh /volume1/install/scripts/ddnsAutoLogin
: not foundstall/scripts/ddnsAutoLogin: line 2:
/volume1/install/scripts/ddnsAutoLogin: line 3: import: not found
/volume1/install/scripts/ddnsAutoLogin: line 4: import: not found
/volume1/install/scripts/ddnsAutoLogin: line 5: import: not found
/volume1/install/scripts/ddnsAutoLogin: line 6: import: not found
/volume1/install/scripts/ddnsAutoLogin: line 7: import: not found
/volume1/install/scripts/ddnsAutoLogin: line 8: import: not found
: not foundstall/scripts/ddnsAutoLogin: line 9:
/volume1/install/scripts/ddnsAutoLogin: line 10: syntax error: unexpected "("

Der Fehler wurde auf den letzten Seiten anhand eines "chmod 755" gelöst, was bei mir leider nicht der Fall war.

Ich hoffe es kann mir Irgendjemand auf die Sprünge helfen, so dass ich dieses Script nicht als für mich gescheitert betrachten muss. Ich bin auf dem Gebiet Linux nicht unbedingt die hellste Kerze auf der Torte, ist eher dass erste mal dass ich mich damit befasse, aber Lernwillig ;-)

Edit: Vergessen zu erwähnen habe ich, dass ich eine "Python-evansport-2.7.8-0103.spk" heruntergeladen habe, und gehofft damit in Erfolg zu baden und die im Script angegebene Ordnerstruktur des Phyton zu kriegen, aber obwohl evansport, sowie ich es gelesen habe für die DS214play sein sollte, gab mir meine DS zu verstehen dass dieses Paket für selbiges nicht geeignet sei.

Besten Dank schon mal

Rich (BBCode):
#!/volume1/@appstore/PythonModule/usr/lib/python2.7

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

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>No-IP Members Portal: Your No-IP</title>"
    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, --username   set your NoIP login_username"
    print "-p, --password   set your NoIP login_password"
    print ""
    print "example:"
    print "./noipAutoLogin -u username -p password"

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:
            print 'we failed to open "%s".' % uri

            if hasattr(e, 'code'):
                print 'We failed with error code - %s.' % e.code
                logging.error('We failed with error code - %s.' % e.code)
            elif hasattr(e, 'reason'):
                print "The error object has the following 'reason' attribute :"
                print e.reason
                print "This usually means the server doesn't exist,'"
                print "is down, or we don't have an internet connection."
                return None
        else:
            return handle.read()

def main(argv):
    username = ""
    password = ""
    logfile = "/volume1/install/logs/noipAutoLogin.log"
    hiddenval = ""
    theurl = "https://www.noip.com/login"
    thelogouturl = "https://www.noip.com/logout"
    txdata = None
    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()
        logging.warning('Manual login with incorrect parameters')
        exit(2)
    for opt, arg in opts:
        if opt in ("-h", "--help"):
            usage()
            exit(2)
        elif opt in ("-u", "--username"):
            username = arg
        elif opt in ("-p", "--password"):
            password = arg

    myhtmlsession = HTMLSession(txheaders)
    response = myhtmlsession.openURI(theurl, None)
    if response == None:
        sys.exit(0)

    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:
        sys.exit(0)
    
    #we should sleep here for about 10 seconds.
    if checkLogin(response):
        print 'We have succesfully logged into NoIP.'
        logging.info('We have succesfully logged into NoIP.')
    else:
        print 'Login failed'
        logging.info('Login failed')

    response = myhtmlsession.openURI(thelogouturl, None)
    if response == None:
        sys.exit(0)

if __name__ == "__main__":
    main(sys.argv[1:])
 
In Deiner Shebang Zeile steht:
#!/volume1/@appstore/PythonModule/usr/lib/python2.7
Das kannst Du ja gar nicht mit
sh /volume1/install/scripts/ddnsAutoLogin
aufrufen, da es kein Shellscript sondern ein Python Script ist. -> Ruf das Script auf mit:
/volume1/@appstore/PythonModule/usr/lib/python2.7 /volume1/install/scripts/ddnsAutoLogin
oder
python /volume1/install/scripts/ddnsAutoLogin

PS: Du musst noch User und Passwort eintragen unter "def main(argv):", wenn Du das nicht schon gemacht hast.
Viel Erfolg!
 
Zuletzt bearbeitet:
Ok, dickes Danke schon einmal, also das Script an sich Funktioniert und kann mit
python /volume1/install/scripts/ddnsAutoLogin
Ausgeführt werden, allerdings weder über den Aufgabenplaner noch über
/volume1/@appstore/PythonModule/usr/lib/python2.7 /volume1/install/scripts/ddnsAutoLogin
Stimmt also der Ordner noch nicht?

Ok, im Aufgabenplaner funktionierts auch mit
python /volume1/install/scripts/ddnsAutoLogin
Bin wohl zu wenig in der Materie drin um das zu wissen, da es im Wiki ohne dass "python" steht.

Danke Feuerwasser
 
Zuletzt bearbeitet:
Gern geschehen!
Scripte in Python rufst Du immer über den Befehl "python" auf, Deine Pfadangabe führt nur in ein Modul/Erweiterungssammlung von Python um den Funktionsumfang der Sprache zu erhöhen, übrigens ist die Endung ....../python2.7 auch nur ein Verzeichnis ;-)
Die richtige Pfadangabe ist (bei mir zumindest und beim Python3 Modul für X86) (übrigens läuft mein Script mit Python3) /usr/local/bin/python
 
Hi 3x3cut0r,
Anscheinend hat sich bei NoIP erneut was geändert. Die Webseite hat sich geändert, und "Login failed" erscheint wieder.
Währe dich dankbar wenn du danach schauen könntest.
 
OK danke für den Hinweis.
Bin grad noch im Urlaub, werde nächste Woche frühestens danach schauen können.
Gruß
 
@3x3cut0r wäre wirklich awesome wenn du dir das anschauen könntest, wenn du Zeit hast. Danke schonmal!
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat