MegaV0lt
Spezialist
Ich habe jetzt mal alles zusammen in das zwischezeitlich um exteren Konfiguration erweiterte Skript gepackt. Ist noch ungetestet!
Wenn man keine Mail senden Will, muss amn nur die Variable SMTPSERVER = "" setzen, dann endet das Skript vor dem Mailversand.
Außerdem ist die Konfiguration der Use/Pass Kombinationen für NoIP und eMail in die externe Datei NOIP_Account_Renew.py gewandert.
Hier nun die komplette Version:
Man könnte noch die Variablen SMTPSERVER und SMTPPORT in die externe Datei auslagern...
Die momentane Konfigurationsdatei:
Testlauf:
Wenn man keine Mail senden Will, muss amn nur die Variable SMTPSERVER = "" setzen, dann endet das Skript vor dem Mailversand.
Außerdem ist die Konfiguration der Use/Pass Kombinationen für NoIP und eMail in die externe Datei NOIP_Account_Renew.py gewandert.
Hier nun die komplette Version:
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=161020.3
# Wichtiger Hinweis:
# Die Login-Daten für No-IP und eMail werden aus der Datei 'NOIP_Account_Renew.py'
# gelesen. Bitte dort die Daten eintragen (Im gleichen Verzeichnis wie das Skript!)
# USERNAME, PASSWORD, FROMADRESS und TOADRESS
import mechanize
import NOIP_Account_Renew # Datei "NOIP_Account_Renew.py"
import time
import ssl
if hasattr(ssl, '_create_unverified_context'):
ssl._create_default_https_context = ssl._create_unverified_context
# Vorgaben
HOST_URL = "https://www.noip.com/members/dns/"
LOG_FILE = "/var/log/NOIP_renew.log"
SMTPSERVER = "" # SMTP-Serveradresse ("" zum deaktivieren)
SMTPPORT = "" # SMTP-Port (Z. B. 25)
RESULT_STR = []
# Funktion: Update host
def update_host(str_host, brow):
global RESULT_STR
brow.select_form(nr=00)
brow.submit()
# Check if OK
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:
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:
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 ""
# 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
from NOIP_Account_Renew import * # Username, Passwort und eMail-Daten laden
USERNAME = NOIP_Account_Renew.USERNAME
PASSWORD = NOIP_Account_Renew.PASSWORD
FROMADDR = NOIP_Account_Renew.FROMADRESS
TOADDR = NOIP_Account_Renew.TOADRESS
# Seite öffnen
br.open(HOST_URL)
# Login
br.select_form(nr=0)
br.form["username"] = USERNAME
br.form["password"] = PASSWORD
br.submit()
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)
# Please set SMTPSERVER = "" if you don't like to send a Status Mail
if not SMTPSERVER:
quit()
####### SMTP Section ############
# Sending Result e-Mail
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'] = FROMADDR
msg['To'] = TOADDR
msg['Subject'] = "NO-IP Account Updater"
body = "NO-IP Account Updater Service updated your NO-IP Account for another 30 days. Please check the attached Logfile\n\n"
for var in RESULT_STR:
body = str(body)+str(var) + "\n"
msg.attach(MIMEText(body, 'plain'))
filename = "NO-IP_updater.log"
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()
# In case server needs Authentication, uncomment below line - remove #
#server.login(FROMADDR, "password")
text = msg.as_string()
server.sendmail(FROMADDR, TOADDR, text)
server.quit()
Man könnte noch die Variablen SMTPSERVER und SMTPPORT in die externe Datei auslagern...
Die momentane Konfigurationsdatei:
Code:
# No-IP-Daten
USERNAME = ""
PASSWORD = ""
# eMail-Daten
FROMADRESS = ""
TOADRESS = ""
Testlauf:
root auf HP-T5730 am 20.10.2016 17:39
[~] # python /mnt/usbdrive/sbin/NOIP-Account-Renew
NO-IP Account-Renew Script #161020.3
host_id=**90 [OK]
host_id=**97 [OK]
host_id=**07 [OK]
[~] # python /mnt/usbdrive/sbin/NOIP-Account-Renew
NO-IP Account-Renew Script #161020.3
host_id=**90 [OK]
host_id=**97 [OK]
host_id=**07 [OK]
Zuletzt bearbeitet: