Dies ist eine mobil optimierte Seite, die schnell lädt. Wenn Sie die Seite ohne Optimierung laden möchten, dann klicken Sie auf diesen Text.

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 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()
 
Für die Nutzung dieser Website sind Cookies erforderlich. Du musst diese akzeptieren, um die Website weiter nutzen zu können. Erfahre mehr…