Neue SLA bei kostenlosen Dyndns Accounts mittels AutoLoginScript umgehen

Status
Für weitere Antworten geschlossen.

Feuerwasser

Benutzer
Mitglied seit
28. Aug 2012
Beiträge
245
Punkte für Reaktionen
0
Punkte
22
Vielen Dank!!! Geht jetzt bei mir auch wieder!
 

Feuerwasser

Benutzer
Mitglied seit
28. Aug 2012
Beiträge
245
Punkte für Reaktionen
0
Punkte
22
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:

Magicgoose

Benutzer
Mitglied seit
16. Aug 2014
Beiträge
9
Punkte für Reaktionen
0
Punkte
0
Also ich kann Dir schon mal sagen , dass es bei mir immer noch 100% funktioniert. Keine Probleme. Ebend noch mal ausgeführt.
 

Hogo Dorn

Benutzer
Mitglied seit
08. Jun 2012
Beiträge
31
Punkte für Reaktionen
0
Punkte
6

Feuerwasser

Benutzer
Mitglied seit
28. Aug 2012
Beiträge
245
Punkte für Reaktionen
0
Punkte
22
könnt ihr eure plugins mal posten? dann mach ich das bei mir nochmal neu und sage dann bescheid.
 

3x3cut0r

Benutzer
Mitglied seit
21. Mai 2011
Beiträge
507
Punkte für Reaktionen
15
Punkte
44
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:

Feuerwasser

Benutzer
Mitglied seit
28. Aug 2012
Beiträge
245
Punkte für Reaktionen
0
Punkte
22
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?
 

3x3cut0r

Benutzer
Mitglied seit
21. Mai 2011
Beiträge
507
Punkte für Reaktionen
15
Punkte
44
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ß
 

Feuerwasser

Benutzer
Mitglied seit
28. Aug 2012
Beiträge
245
Punkte für Reaktionen
0
Punkte
22
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
 

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
13
Punkte
84
Für den Login den User root und Password vom admin benutzt?
 

3x3cut0r

Benutzer
Mitglied seit
21. Mai 2011
Beiträge
507
Punkte für Reaktionen
15
Punkte
44
probier mal ein
Mediaserver:~# chmod 755 /etc/noipAutoLogin
Mediaserver:~# /etc/noipAutoLogin

gruß
 

Feuerwasser

Benutzer
Mitglied seit
28. Aug 2012
Beiträge
245
Punkte für Reaktionen
0
Punkte
22
@ 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:

bLIZZo

Benutzer
Mitglied seit
06. Jan 2015
Beiträge
2
Punkte für Reaktionen
0
Punkte
0
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:])
 

Feuerwasser

Benutzer
Mitglied seit
28. Aug 2012
Beiträge
245
Punkte für Reaktionen
0
Punkte
22
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:

bLIZZo

Benutzer
Mitglied seit
06. Jan 2015
Beiträge
2
Punkte für Reaktionen
0
Punkte
0
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:

Feuerwasser

Benutzer
Mitglied seit
28. Aug 2012
Beiträge
245
Punkte für Reaktionen
0
Punkte
22
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
 

fly-tox

Benutzer
Mitglied seit
26. Jun 2016
Beiträge
3
Punkte für Reaktionen
0
Punkte
0
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.
 

3x3cut0r

Benutzer
Mitglied seit
21. Mai 2011
Beiträge
507
Punkte für Reaktionen
15
Punkte
44
OK danke für den Hinweis.
Bin grad noch im Urlaub, werde nächste Woche frühestens danach schauen können.
Gruß
 

fly-tox

Benutzer
Mitglied seit
26. Jun 2016
Beiträge
3
Punkte für Reaktionen
0
Punkte
0
Danke! Wünsche dir ein schönes Urlaub.
 

mcmax

Benutzer
Mitglied seit
27. Sep 2014
Beiträge
2
Punkte für Reaktionen
0
Punkte
0
@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 

 
 
  AdBlocker gefunden!

Du bist nicht hier, um Support für Adblocker zu erhalten. Dein Adblocker funktioniert bereits ;-)

Klar machen Adblocker einen guten Job, aber sie blockieren auch nützliche Funktionen.

Das Forum wird mit hohem technischen, zeitlichen und finanziellen Aufwand kostenfrei zur Verfügung gestellt. Wir zeigen keine offensive Werbung und bemühen uns um eine dezente Integration.

Bitte unterstütze dieses Forum, in dem du deinen Adblocker für diese Seite deaktivierst.

Du kannst uns auch über unseren Kaffeautomat einen Kaffe ausgeben oder ein PUR Abo abschließen und das Forum so werbefrei nutzen.

Vielen Dank für Deine Unterstützung!