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.
Port 25 klappt, 465 leider nicht.
Hatte auch einen anderen Provider versucht bei dem ich ein Passwort mit Umlauten verwende. Dort kam auch eine Fehlermeldung.
Keine Ahnung ob dies mit python zusammenhängt.
 
Okay...kann es (fast) nachvollziehen
Ich habe hier einen Mailserver der auch auf 465 , 587 sowie 25 hört.
Ich bin jetzt nicht der Mail Spezialist oder Python Spezialist aber ich glaube folgendes:
Der Unterschied der Port 25 und 465 ist, daß wenn bei eiem Mailserver direkt auf Port 465 Connected wird, sofort TLS (Encryptet) gesprochen wird, wohingegen auf Port 25 die Encryption im Nachhinein ausgehandelt wird.
Begrüßt der Sendende (in dem Fall das Script) mit EHLO sendet der Empfangende Mailserver sein Command Set zurück. Ist dort STARTTLS dabei, würde das bedeuten, dass nun beide mit dem Schlüsselaustausch beginnen.
Begrüßt der Sendende Mailserver aber mit HELO impliziert das, daß kein TLS gesprochen werden kann,
Ich glaub demnach schlicht weg, daß diese Python Lib den Mailversand auf Port 465 schlicht weg nicht beherrscht, wohingegen der verschlüsselte Versand per STARTTLS und dmait auf Port 25 durchaus möglich sein sollte.
Also, wenn du unbedingt verschlüsselt senden willst, dann mach das normal auf Port 25 ....das sollte gehen......falls nicht, wird es unverschlüsselt funktionieren.....
Keine Ahnung ob ich damit voll daneben liege oder nicht :-)

Wegen den Umlauten in Passworten, versuch es mal

ä = %C3%A4
ü =%C3%BC
ö =%C3%B6

...nur so eine Idee ?
 
Zuletzt bearbeitet von einem Moderator:
Ich habe es nun so gelöst, dass das Skript über den Task Scheduler unter xpenology ausgeführt wird. Den Email-Versand im Skript habe ich deaktiviert und lasse mich durch xpenology informieren.
Hier wird auch die Konsolenausgabe protokoliert.

Code:
Task Scheduler has completed a scheduled task.

Task: no_ip_update
Start time: Sat, 19 Nov 2016 10:24:39 GMT
Stop time: Sat, 19 Nov 2016 10:24:54 GMT
Current status: 0
Standard output/error:
NO-IP Account-Renew Script #161021.3
host_id=31330251 [OK]
host_id=30897053 [OK]
host_id=30962292 [OK]
 
Zuletzt bearbeitet von einem Moderator:
Das sagt whereis python:

python: /usr/bin/python3.4m /usr/bin/python3.4-config /usr/bin/python3.4 /usr/bin/python3.4m-config /usr/bin/python /usr/bin/python2.7 /usr/lib/python3.4 /usr/lib/python2.7 /usr/lib/python2.6 /etc/python3.4 /etc/python /etc/python2.7 /usr/local/lib/python3.4 /usr/local/lib/python2.7 /usr/include/python3.4m /usr/include/python3.4 /usr/include/python2.7 /usr/share/python /usr/share/man/man1/python.1.gz
 
Der Pfad scheint zu stimmen. Vermutlich ein Rechteproblem... Kenne IPC leider nicht...
Vielleicht geht es ja so:

0 6 1,15 * * root /usr/bin/python /home/scripts/Oscam/NOIP-Account-Renew
 
Ich hatte das ganze schon mal am Laufen, hab aber meinen Pi neu aufsetzen müssen. Also im Downloadordner im ersten Post ist ja auch davon die Rede, dass Python 3.x genutzt wird. Habe ich auch installiert, allerdings ist mechanize anscheinend ja nur für Python 2.x oder sehe ich das falsch? Wenn ich den Ordner nach site-packages kopiere bekomme ich . Jemand eine Idee?
 
Das läuft bei mir.
root@homebase:~# python2 -V
Python 2.7.9
root@homebase:~# python3 -V
Python 3.4.2

Man kann doch mehrere Python Versionen parallel installiert haben, oder ?
 
Zuletzt bearbeitet:
Hab ich tatsächlich auch mit drauf, aber in den folgenden 2.7 Ordnern finde ich irgendwie nichts, wo site-packages oder das pip module sein könnte. Denn wenn ich standard pip install mache nimmt er ja mein python 3.x, dh. ich müsste den Pfad angeben?!

EDIT: War einfach noch kein pip installiert, jetzt funktioniert anscheinend alles. Danke!
 
Zuletzt bearbeitet:
Hallo.
Ich lasse das Script auf einem BananaPi mit Debian 8 laufen.
Installiert sind:
python-mechanize/stable,now 1:0.2.5-3 all [installiert]
Python2 Version 2.7.9
Python3 Version 3.4.2

Beinm Aufruf des Scriptes bekomme ich folgende Fehlermeldung:

/tmp/no-ip/NOIP-Account-Renew
Traceback (most recent call last):
File "/tmp/no-ip/NOIP-Account-Renew", line 47, in <module>
br.find_link(text='Manage Hosts')
File "/usr/lib/python2.7/dist-packages/mechanize/_mechanize.py", line 620, in find_link
raise LinkNotFoundError()
mechanize._mechanize.LinkNotFoundError


Ich nehme mal an, daß mechanize hier das falsche Python aufruft ? Wenn ja, wie kann ich Python3 nutzen ?
Danke für all Tips :)

Um meine Frage (2 Posts weiter oben) selbst zu beantworten.
soweit ich im Internet gelesen habe, funktioniert mechanize nur mit Python 2.x nicht aber mit Python3.
wenn man nun mechanize nicht über apt-get installiert, sondern über das im mechanize Ordner liegende Install Script (sudo python setup.py install) dann funktioniert es. allerdings auch hier, nur der erste NOIP account wird geupdated.
Was ich allerdings nicht finde, wenn ich mich bei meinem NOIP Account einlogge, wo ich manuel klicken muss, damit ich das auf 30 Tage setzen kann ? In welchem Menu ist das ?
Jan

Hallo,

ich habe seit neuestem genau dieses Problem auf meinem Raspi.
Hat bisher immer funktioniert, doch seit 1. August nicht mehr.

Kannst Du mir bitte erklären, wie ich genau vorgehen muss, um den Fehler zu beheben?

Danke und Grüße
 
Ich denke die haben an der Seite was verändert. Kann man das noch auf der Seite bestätigen? Ich finde da nichts mehr ;-(
Scheint nur noch per eMail-Link zu gehen
 
Ich denke die haben an der Seite was verändert. Kann man das noch auf der Seite bestätigen?
Ja, die haben die alte alternative Seite abgeschaltet.
Scheint nur noch per eMail-Link zu gehen
Das hoffe ich mal nicht, wird sich aber erst nächsten Monat herausstellen.

Damit das tolle Skript mit der neuen Seite wieder funktioniert, müssen die folgenden 3 Zeilen einfach aus dem Python Skript entfernt werden:
Code:
br.find_link(text='Manage Hosts')
req = br.click_link(text='Manage Hosts')
br.open(req)
Dieser Schritt ist einfach nicht mehr notwendig.

Gruß kabeltod
 
Die haben nichts verändert und das Script Funktioniert sowohl in der 1.0 als auch in der 2.0 Version immer noch Perfekt.

Code:
======== Auftrag gestartet: 2018-08-07 10:56:58 ================================

Aktuelle IP...
Fertig. Aktuelle IP lautet 'XX.XX.XX.XX'
Aktualisiere/Erneuere DynDNS Adresse(n) bei NO-IP.com
Fertig. Aktualisierung/Erneuerung von 5 Adresse(n) mit IP 'XX.XX.XX.XX':
- 1.sytes.net
- 2.sytes.net
- 3.sytes.net
- 4.sytes.net
- 5.sytes.net

======== Auftrag beendet: 2018-08-07 10:57:11 ==================================
 
Zuletzt bearbeitet:
@kabeltod
Vielen Dank für den Hinweis. Ohne die drei Zeilen klappt es wieder ;-)
Code:
root auf HP-T610 am 07.08.2018 11:05
[~] # NOIP-Account-Renew
NO-IP Account-Renew Script #180807
host_id=4xxx90 [OK]
host_id=4xxx97 [OK]
host_id=3xxx07 [OK]

Das geänderte Skript vom 07.08.2018:

Code:
#!/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=180807

# 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:
  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

# 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()
 
Zurück
Oben