Aktuelles
Digital Eliteboard - Das Digitale Technik Forum

Registriere dich noch heute kostenlos, um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereichen, welche für Gäste verwehrt bleiben

Registriere dich noch heute kostenlos, um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereichen, welche für Gäste verwehrt bleiben

NO-IP Account-Renew Script 1.0

    Nobody is reading this thread right now.
Das kommt beim alten raus !

> /usr/local/bin/NOIP-Account-Renew
OK host.php?host_id=66405749
OK host.php?host_id=67061132


Und das jetzt nach dem installieren von dos2unix
> /usr/local/bin/NOIP-Account-Renew
NO-IP Account-Renew Script #190312
host_id=66405749 [OK]
host_id=67061132 [OK]


Sollte passen jetzt mit dem script 190312 ?
 
Zuletzt bearbeitet:
Ich habe nun auch mal versucht das Script "VERSION=190312" auf einem RasPi 3A+ zu installieren und ans laufen zu bekommen, leider ohne erfolg, das Sript steigt mit einer Fehlermeldung in Zeile 36 aus, weil "mechanize" nicht gefunden wird, da hilft auch kein Update auf Python3, das Modul mechanize wird auch hierbei nicht gefunden. :anguished:
 
Geht dieses Script eig noch? ich erhalte

NO-IP Account-Renew Script #190312
Traceback (most recent call last):
File "./no-ip_updater.py", line 81, in <module>
myconf = importlib.import_module(CONFIG_FILE, package=None)
File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
ImportError: No module named NOIP_Account_Renew
 
Ich vermute Du hast das nicht richtig gelesen:
Code:
# Wichtiger Hinweis: Externe Konfiguration
# Die Login-Daten für No-IP und eMail können aus einer externen Datei, welche in
# der Variable "CONFIG_FILE" definiert werden muss gelesen werden.
# Besonderheit: Die Datei im Dateisystem muss die Endung ".py" haben.
# Bitte dort die Daten eintragen (Im gleichen Verzeichnis wie das Skript!)
CONFIG_FILE = "NOIP_Account_Renew"  # Ohne .py (Im gleichen Verzeichnis wie das Skript!)
# Kann abgeschaltet werden, in dem man CONFIG_FILE = "" setzt. In dem Fall die
# Variablen hier ausfüllen!
USERNAME = ""    # No-IP Benutzername
PASSWORD = ""    # No-IP Passwort
FROMADRESS = ""  # eMail-Sender
TOADRESS = ""    # eMail-Empfänger
SMTPSERVER = ""  # SMTP-Serveradresse ("" zum deaktivieren)
SMTPPORT = ""    # SMTP-Port (Z. B. 25)
SMTPPASS = ""    # Server verlangt Autentification ("" zum deaktivieren)
 
Hat No-IP eventuell aktuell irgendwas verändert? Klappt bei euch noch alles? Kriege das Script aktuell nicht mehr zum laufen. Ist mir aufgefallen, da ich heute ne freundliche Mail von No-IP bekommen hab das mein Account demnächst ausläuft.

Code:
pi@LabPi:~/Scripts $ sudo python /home/pi/Scripts/no-ip_updater.py
NO-IP Account-Renew Script #190312
Traceback (most recent call last):
  File "/home/pi/Scripts/no-ip_updater.py", line 98, in <module>
    br.select_form(nr=0)
  File "/usr/lib/python2.7/dist-packages/mechanize/_mechanize.py", line 499, in select_form
    global_form = self._factory.global_form
  File "/usr/lib/python2.7/dist-packages/mechanize/_html.py", line 544, in __getattr__
    self.forms()
  File "/usr/lib/python2.7/dist-packages/mechanize/_html.py", line 557, in forms
    self._forms_factory.forms())
  File "/usr/lib/python2.7/dist-packages/mechanize/_html.py", line 237, in forms
    _urlunparse=_rfc3986.urlunsplit,
  File "/usr/lib/python2.7/dist-packages/mechanize/_form.py", line 844, in ParseResponseEx
    _urlunparse=_urlunparse,
  File "/usr/lib/python2.7/dist-packages/mechanize/_form.py", line 979, in _ParseFileEx
    data = file.read(CHUNK)
  File "/usr/lib/python2.7/dist-packages/mechanize/_response.py", line 195, in read
    data = self.wrapped.read(to_read)
  File "/usr/lib/python2.7/socket.py", line 384, in read
    data = self._sock.recv(left)
  File "/usr/lib/python2.7/httplib.py", line 573, in read
    return self._read_chunked(amt)
  File "/usr/lib/python2.7/httplib.py", line 633, in _read_chunked
    value.append(self._safe_read(amt))
  File "/usr/lib/python2.7/httplib.py", line 688, in _safe_read
    chunk = self.fp.read(min(amt, MAXAMOUNT))
  File "/usr/lib/python2.7/socket.py", line 384, in read
    data = self._sock.recv(left)
  File "/usr/lib/python2.7/ssl.py", line 766, in recv
    return self.read(buflen)
  File "/usr/lib/python2.7/ssl.py", line 653, in read
    v = self._sslobj.read(len)
socket.error: [Errno 104] Connection reset by peer

Vorab vielen Dank!
 
Zuletzt bearbeitet von einem Moderator:
bisher ging es immer (zuletzt am 16. wie automatisch eingestellt)

NO-IP Account Updater Service updated your NO-IP Account for another 30 days.
Please check the attached Logfile
 
Hie läuft es. Gerade getestet:
Code:
[~] # /usr/local/sbin/NOIP-Account-Renew
NO-IP Account-Renew Script #190313
Lade Konfiguration aus NOIP_Account_Renew.py
host_id=xxx90 [OK]
host_id=xxx97 [OK]
host_id=xxx07 [OK]
 
Ne habe nichts verändert ist nach wie vor noch debian stretch im Einsatz.
Magic... nichts verändert jetzt ging es grad mal kurz, jetzt jedoch wieder Fehlermeldungen, interessanterweise immer wieder andere
Code:
sudo python /home/pi/Scripts/no-ip_updater.py
NO-IP Account-Renew Script #190312
host_id=XXXXXX [OK]

...

sudo python /home/pi/Scripts/no-ip_updater.py
NO-IP Account-Renew Script #190312
Traceback (most recent call last):
  File "/home/pi/Scripts/no-ip_updater.py", line 109, in <module>
    for link in br.links():
  File "/usr/lib/python2.7/dist-packages/mechanize/_html.py", line 42, in __call__
    for item in self._iterator:
  File "/usr/lib/python2.7/dist-packages/mechanize/_html.py", line 160, in links
    for token in p.tags(*(self.urltags.keys()+["base"])):
  File "/usr/lib/python2.7/dist-packages/mechanize/_pullparser.py", line 147, in iter_until_exception
    yield fn(*args, **kwds)
  File "/usr/lib/python2.7/dist-packages/mechanize/_pullparser.py", line 256, in get_tag
    tok = self.get_token()
  File "/usr/lib/python2.7/dist-packages/mechanize/_pullparser.py", line 236, in get_token
    data = self._fh.read(self.chunk)
  File "/usr/lib/python2.7/dist-packages/mechanize/_response.py", line 195, in read
    data = self.wrapped.read(to_read)
  File "/usr/lib/python2.7/socket.py", line 384, in read
    data = self._sock.recv(left)
  File "/usr/lib/python2.7/httplib.py", line 573, in read
    return self._read_chunked(amt)
  File "/usr/lib/python2.7/httplib.py", line 615, in _read_chunked
    line = self.fp.readline(_MAXLINE + 1)
  File "/usr/lib/python2.7/socket.py", line 480, in readline
    data = self._sock.recv(self._rbufsize)
  File "/usr/lib/python2.7/ssl.py", line 766, in recv
    return self.read(buflen)
  File "/usr/lib/python2.7/ssl.py", line 653, in read
    v = self._sslobj.read(len)
socket.error: [Errno 104] Connection reset by peer

...

NO-IP Account-Renew Script #190312
Traceback (most recent call last):
  File "/home/pi/Scripts/no-ip_updater.py", line 98, in <module>
    br.select_form(nr=0)
  File "/usr/lib/python2.7/dist-packages/mechanize/_mechanize.py", line 499, in select_form
    global_form = self._factory.global_form
  File "/usr/lib/python2.7/dist-packages/mechanize/_html.py", line 544, in __getattr__
    self.forms()
  File "/usr/lib/python2.7/dist-packages/mechanize/_html.py", line 557, in forms
    self._forms_factory.forms())
  File "/usr/lib/python2.7/dist-packages/mechanize/_html.py", line 237, in forms
    _urlunparse=_rfc3986.urlunsplit,
  File "/usr/lib/python2.7/dist-packages/mechanize/_form.py", line 844, in ParseResponseEx
    _urlunparse=_urlunparse,
  File "/usr/lib/python2.7/dist-packages/mechanize/_form.py", line 979, in _ParseFileEx
    data = file.read(CHUNK)
  File "/usr/lib/python2.7/dist-packages/mechanize/_response.py", line 195, in read
    data = self.wrapped.read(to_read)
  File "/usr/lib/python2.7/socket.py", line 384, in read
    data = self._sock.recv(left)
  File "/usr/lib/python2.7/httplib.py", line 573, in read
    return self._read_chunked(amt)
  File "/usr/lib/python2.7/httplib.py", line 633, in _read_chunked
    value.append(self._safe_read(amt))
  File "/usr/lib/python2.7/httplib.py", line 688, in _safe_read
    chunk = self.fp.read(min(amt, MAXAMOUNT))
  File "/usr/lib/python2.7/socket.py", line 384, in read
    data = self._sock.recv(left)
  File "/usr/lib/python2.7/ssl.py", line 766, in recv
    return self.read(buflen)
  File "/usr/lib/python2.7/ssl.py", line 653, in read
    v = self._sslobj.read(len)
socket.error: [Errno 104] Connection reset by peer

@MegaV0lt sehe grad, du hast die Version 190313 im Einsatz , gibts die auch irgendwo? Hab ich die ggf. übersehen? Oder ist das deine private Version?

Danke & Gruß!

//Edit: Wenn ich das Script mehrfach hintereinander ausführe, dann klappt es plötzlich beim zweiten oder spätestens beim dritten mal. Spannend, ich tüftel mal weiter, vieleicht irgendwelche Timing Probleme - danke für eure Rückmeldungen!
 
Zuletzt bearbeitet von einem Moderator:
Hier die Version vom 13.3.2019 (Keine oder minimale änderungen):
Python:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
### *|--------------------------------|* ###
### *| NO-IP Account-Renew Script 1.0 |* ###
### *|   (c) by DarkStarXxX @ DEB     |* ###
### *|--------------------------------|* ###
# Modifiziert von MegaV0lt @ DEB
# Modifiziert von SLASH @ DEB
VERSION=190313

# Wichtiger Hinweis: Externe Konfiguration
# Die Login-Daten für No-IP und eMail können aus einer externen Datei, welche in
# der Variable "CONFIG_FILE" definiert werden muss gelesen werden.
# Besonderheit: Die Datei im Dateisystem muss die Endung ".py" haben.
# Bitte dort die Daten eintragen (Im gleichen Verzeichnis wie das Skript!)
CONFIG_FILE = "NOIP_Account_Renew"  # Ohne .py (Im gleichen Verzeichnis wie das Skript!)
# Kann abgeschaltet werden, in dem man CONFIG_FILE = "" setzt. In dem Fall die
# Variablen hier ausfüllen!
USERNAME = ""    # No-IP Benutzername
PASSWORD = ""    # No-IP Passwort
FROMADRESS = ""  # eMail-Sender
TOADRESS = ""    # eMail-Empfänger
SMTPSERVER = ""  # SMTP-Serveradresse ("" zum deaktivieren)
SMTPPORT = ""    # SMTP-Port (Z. B. 25)
SMTPPASS = ""    # Server verlangt Autentification ("" zum deaktivieren)

# Vorgaben
LOG_FILE = ""  # Kein Log, wenn nächste Zeile auskommentiert ist
#LOG_FILE = "/var/log/NOIP_renew.log"  # Dateiname wird auch für die eMail verwendet
MAIL_SUBJECT = "NO-IP Account Updater"  # Betreff der Status eMail
MAIL_BODY = "NO-IP Account Updater Service updated your NO-IP Account for another 30 days.\nPlease check the attached Logfile\n\n"  # Text in der eMail
HOST_URL = "https://www.noip.com/members/dns/"
RESULT_STR = []

import importlib
import mechanize
import time
import ssl
if hasattr(ssl, '_create_unverified_context'):
  ssl._create_default_https_context = ssl._create_unverified_context

# Funktion: update_host - Für jeden Host "Modify" klicken
def update_host(str_host, brow):
  global RESULT_STR
  brow.select_form(nr=00) ; brow.submit()
  # Check if OK
  if LOG_FILE:
    ts = time.strftime("%d.%m.%Y %H:%M:%S")  # Zeitstempel für das Log (19.10.2016 12:51:30)
    f1 = open(LOG_FILE, 'a+')
  host_id = after(str_host, "?")             # Alle Zeichen nach dem ?
  if brow.response().read().find("Update will be applied") >= 0:
    if LOG_FILE: print >> f1,ts,host_id + " [OK]"  # Ausgabe in das Log
    print(host_id + " [OK]")                 # Ausgabe auf der Konsole (und cron)
    RESULT_STR.append(host_id + " [OK]")     # Für die eMail
  else:
    if LOG_FILE: print >> f1,ts,host_id + " [FAILED]"
    print(host_id + " [FAILED]")
    RESULT_STR.append(host_id + " [FAILED]")
  return

# Funktion: after - Liefert Zeichenkette nach Zeichen a
def after(value, a):
  # Find and validate first part
  pos_a = value.rfind(a)
  if pos_a == -1: return value  # Nicht gefunden: Ganzer Wert zurück!
  # Returns chars after the found string.
  adjusted_pos_a = pos_a + len(a)
  if adjusted_pos_a >= len(value): return ""
  return value[adjusted_pos_a:]

# Browser options
br = mechanize.Browser()
br.set_handle_equiv(True)    ; br.set_handle_robots(False)
br.set_handle_redirect(True) ; br.set_handle_referer(True)
br.addheaders = [('User-agent', 'Chrome')]
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)

### Start
print "NO-IP Account-Renew Script #%s" % VERSION
if CONFIG_FILE:
  print('Lade Konfiguration aus ' + CONFIG_FILE + '.py')
  myconf = importlib.import_module(CONFIG_FILE, package=None)
  USERNAME = myconf.USERNAME     ; PASSWORD = myconf.PASSWORD
  FROMADRESS = myconf.FROMADRESS ; TOADRESS = myconf.TOADRESS
  SMTPSERVER = myconf.SMTPSERVER ; SMTPPORT = myconf.SMTPPORT
  SMTPPASS = myconf.SMTPPASS

# Prüfen, ob USERNAME und PASSWORT konfiguriert sind
if not USERNAME:
  print('FEHLER: USERNAME ist nicht konfiguriert!') ; quit()

if not PASSWORD:
  print('FEHLER: PASSWORD ist nicht konfiguriert!') ; quit()

# Seite öffnen
br.open(HOST_URL)

# Login
br.select_form(nr=0)
br.form["username"] = USERNAME ; br.form["password"] = PASSWORD
br.submit()

# Nicht mehr nötig, da die alternative Seite abgeschaltet wurde (August 2018)
#br.find_link(text='Manage Hosts')
#req = br.click_link(text='Manage Hosts')
#br.open(req)

# Links in Array speichern
mylink = []  # Leeres Array
for link in br.links():
  if link.text == 'Modify': mylink += [link]

# Links klicken und Updaten
for link in mylink:
  req = br.click_link(link)
  br.open(req)
  update_host(link.url, br)

####### SMTP Section ############
if not SMTPSERVER: quit()  # Nur wenn SMTPSERVER gesetzt ist

import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEBase import MIMEBase
from email import encoders

msg = MIMEMultipart()

msg['From'] = FROMADRESS ; msg['To'] = TOADRESS
msg['Subject'] = MAIL_SUBJECT

body = MAIL_BODY
for var in RESULT_STR:
  body = str(body) + str(var) + "\n"

msg.attach(MIMEText(body, 'plain'))

if LOG_FILE:
  filename = after(LOG_FILE, "/")  # Dateiname ohne Pfad
  attachment = open(LOG_FILE, "rb")
  part = MIMEBase('application', 'octet-stream')
  part.set_payload((attachment).read())
  encoders.encode_base64(part)
  part.add_header('Content-Disposition', "attachment; filename= %s" % filename)
  msg.attach(part)

# Example: Server Address and TCP Port - Exmaple: '192.168.1.1' , 25
server = smtplib.SMTP(SMTPSERVER, SMTPPORT)
server.starttls()

# Server verlangt Autentification (Nur wenn SMTPPASS gesetzt ist)
if SMTPPASS: server.login(FROMADRESS, SMTPPASS)

text = msg.as_string()
server.sendmail(FROMADRESS, TOADRESS, text)
server.quit()
 
Zuletzt bearbeitet von einem Moderator:
Zurück
Oben