From cf3c22fa9071bec3f80d2eeda5e0221b04e5f645 Mon Sep 17 00:00:00 2001 From: clamsawd Date: Tue, 27 Oct 2015 12:25:17 +0100 Subject: [PATCH] Added ip2e python tools --- ip2e-config.py | 91 ++++++++++++++++++++++ ip2e-daemon.py | 206 +++++++++++++++++++++++++++++++++++++++++++++++++ ip2e-log.py | 83 ++++++++++++++++++++ 3 files changed, 380 insertions(+) create mode 100755 ip2e-config.py create mode 100755 ip2e-daemon.py create mode 100755 ip2e-log.py diff --git a/ip2e-config.py b/ip2e-config.py new file mode 100755 index 0000000..26d1fc7 --- /dev/null +++ b/ip2e-config.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +# -------------------------------------------------------------- +# ip2e (IP to email) - Create the configuration file. | +# Created by clamsawd (clamsawd@openmailbox.org) | +# Licensed by GPL v.3 | +# Last update: 27-10-2015 | +# | +# Dependences: curl, wget, sendEmail, libio-socket-ssl-perl | +# Compatible with Python 3.x | +# -------------------------------------------------------------- +version="0.3-alpha" + +#Import python-modules +import os +import sys + +#Check if your system use Python 3.x +if sys.version_info<(3,0): + print ("") + print ("You need python 3.x to run this program.") + print ("") + exit(1) + +#Function to clear screen +def ClearScreen(): + if os.name == "posix": + os.system("clear") + elif os.name == "nt": + os.system("cls") + else: + print ("Error: Unable clear screen") + +#Detect system & PATH of user folder +if os.name == "posix": + os.chdir(os.environ["HOME"]) + print ("POSIX detected") +elif os.name == "nt": + os.chdir(os.environ["USERPROFILE"]) + print ("Windows detected") + +if not os.path.exists(".ip2e"): + os.makedirs(".ip2e") + os.chdir(".ip2e") +if os.path.exists(".ip2e"): + os.chdir(".ip2e") + +ClearScreen() +print ("") +print ("ip2e-config v"+version+" - Create config.file") +print ("") +FromEmail=input("Type the email sender: ") +FromEmailUser=input("Type the user of email sender: ") +FromEmailPass=input("Type the pass of email sender: ") +SmtpFromEmail=input("Type the server STMP of email sender: ") +ToEmail=input("Type the email receiver: ") + +#Create 'ip2e-conf.py' +def createip2ecf(): + ip2ecf=open('ip2e-conf.py','w') + ip2ecf.close() +def writeip2ecf(): + ip2ecf=open('ip2e-conf.py','a') + ip2ecf.write('# sample configuration file of ip2e\n') + ip2ecf.write('\n') + ip2ecf.write('FromEmail="'+FromEmail+'"\n') + ip2ecf.write('FromEmailUser="'+FromEmailUser+'"\n') + ip2ecf.write('FromEmailPass="'+FromEmailPass+'"\n') + ip2ecf.write('SmtpFromEmail="'+SmtpFromEmail+'"\n') + ip2ecf.write('ToEmail="'+ToEmail+'"\n') + ip2ecf.close() + +if os.name == "posix": + os.system("rm ip2e-conf.py") +elif os.name == "nt": + os.system("del ip2e-conf.py") +createip2ecf() +writeip2ecf() +exec(open("ip2e-conf.py").read()) + +#Show the configuration +ClearScreen() +print ("") +print ("ip2e-config v"+version+" - Current config.file") +print ("") +if os.name == "posix": + os.system("cat ip2e-conf.py") +elif os.name == "nt": + os.system("type ip2e-conf.py") +print ("") diff --git a/ip2e-daemon.py b/ip2e-daemon.py new file mode 100755 index 0000000..3c71c65 --- /dev/null +++ b/ip2e-daemon.py @@ -0,0 +1,206 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +# -------------------------------------------------------------- +# ip2e (IP to email) - Run ip2e daemon. | +# Created by clamsawd (clamsawd@openmailbox.org) | +# Licensed by GPL v.3 | +# Last update: 27-10-2015 | +# | +# Dependences: curl, wget, sendEmail, libio-socket-ssl-perl | +# Compatible with Python 3.x | +# -------------------------------------------------------------- +version="0.3-alpha" + +#Import python-modules +import subprocess +import os +import sys + +#Check if your system use Python 3.x +if sys.version_info<(3,0): + print ("") + print ("You need python 3.x to run this program.") + print ("") + exit(1) + +#Function to clear screen +def ClearScreen(): + if os.name == "posix": + os.system("clear") + elif os.name == "nt": + os.system("cls") + else: + print ("Error: Unable clear screen") + +#Function to pause screen +def PauseScreen(): + if os.name == "posix": + os.system("read pause") + elif os.name == "nt": + os.system("pause > nul") + +#Function to wait ten minutes +def WaitTenMinutes(): + if os.name == "posix": + os.system("sleep 600") + elif os.name == "nt": + os.system("ping -n 600 localhost>nul") + else: + print ("Error waiting 10 minutes") + +#Detect system & PATH of user folder +if os.name == "posix": + os.chdir(os.environ["HOME"]) + print ("POSIX detected") +elif os.name == "nt": + os.chdir(os.environ["USERPROFILE"]) + print ("Windows detected") + +if not os.path.exists(".ip2e"): + os.makedirs(".ip2e") + os.chdir(".ip2e") +if os.path.exists(".ip2e"): + os.chdir(".ip2e") + +#Check if exists 'ip2e-conf.py' +def createip2ecf(): + ip2ecf=open('ip2e-conf.py','w') + ip2ecf.close() +def writeip2ecf(): + ip2ecf=open('ip2e-conf.py','a') + ip2ecf.write('# sample configuration file of ip2e\n') + ip2ecf.write('\n') + ip2ecf.write('FromEmail="ip2e@daemon"\n') + ip2ecf.write('FromEmailUser="unknown"\n') + ip2ecf.write('FromEmailPass="password-here"\n') + ip2ecf.write('SmtpFromEmail="smtp.email.com"\n') + ip2ecf.write('ToEmail="unknown@email.com"\n') + ip2ecf.close() + +if os.path.isfile("ip2e-conf.py"): + print ("ip2e-conf.py exists") +else: + print ("ip2e-conf.py created") + createip2ecf() + writeip2ecf() + +#Check if exists 'current-ip.py' +def createip2eIPcf(): + ip2eIPcf=open('current-ip.py','w') + ip2eIPcf.close() +def writeip2eIPcf(): + ip2eIPcf=open('current-ip.py','a') + ip2eIPcf.write('CurrentIP="0.0.0.0"\n') + ip2eIPcf.close() + +if os.path.isfile("current-ip.py"): + print ("current-ip.py exists") +else: + print ("current-ip.py created") + createip2eIPcf() + writeip2eIPcf() + +#Check if sendEmail is installed +from subprocess import PIPE, Popen +try: + sendEmailCheck = Popen(['sendEmail', '-q'], stdout=PIPE, stderr=PIPE) + sendEmailCheck.stderr.close() +except: + ClearScreen() + print ("") + print ("Error: 'sendEmail' is not installed!") + print ("") + print ("Help:") + print (" * http://caspian.dotconf.net/menu/Software/SendEmail/") + print ("") + print ("Press ENTER to exit") + PauseScreen() + exit(1) + +#Check if curl is installed +try: + curlCheck = Popen(['curl', '--version'], stdout=PIPE, stderr=PIPE) + curlCheck.stderr.close() +except: + ClearScreen() + print ("") + print ("Error: 'curl' is not installed!") + print ("") + print ("Help:") + print (" * http://curl.haxx.se/download.html") + print (" * http://www.paehl.com/open_source/?CURL_7.45.0") + print ("") + print ("Press ENTER to exit") + PauseScreen() + exit(1) + +#Import variables from ip2e-conf.py +exec(open("ip2e-conf.py").read()) + +#Run ip2e daemon +ClearScreen() +print ("[ip2e-daemon] Initialized ip2e-daemon v"+version+" (Ctrl+C to stop)") +if os.name == "posix": + print ("[ip2e-daemon] Log in "+os.environ["HOME"]+"/.ip2e/ip2e.log") +elif os.name == "nt": + print ("[ip2e-daemon] Log in "+os.environ["USERPROFILE"]+"\.ip2e\\ip2e.log") +os.system("echo [ip2e-daemon] Initialized ip2e-daemon v"+version+" > ip2e.log") +print ("[ip2e-daemon] Waiting 60 seconds...") +os.system("echo [ip2e-daemon] Waiting 60 seconds... >> ip2e.log") +if os.name == "posix": + os.system("sleep 1") +elif os.name == "nt": + os.system("ping -n 1 localhost>nul") + +PublicIP = 1 + +while PublicIP <= 2: + GetCurrentIP = 1 + while GetCurrentIP <= 2: + print ("[ip2e-daemon] IP Updating...") + os.system("echo [ip2e-daemon] IP Updating... >> ip2e.log") + NewIP = os.popen('curl -s http://ip.appspot.com/').read() + #NewIP = os.popen('curl -s ifconfig.me').read() + #NewIP = os.popen('wget -qO- icanhazip.com').read() + if NewIP != "": + GetCurrentIP += 2 + else: + print ("[ip2e-daemon] Error getting IP") + os.system("echo [ip2e-daemon] Error getting IP >> ip2e.log") + print ("[ip2e-daemon] Retrying in 5 seconds...") + os.system("echo [ip2e-daemon] Retrying in 5 seconds... >> ip2e.log") + if os.name == "posix": + os.system("sleep 5") + elif os.name == "nt": + os.system("ping -n 5 localhost>nul") + exec(open("current-ip.py").read()) + if CurrentIP == NewIP: + print ("[ip2e-daemon] IP has not changed") + os.system("echo [ip2e-daemon] IP has not changed >> ip2e.log") + else: + print ("[ip2e-daemon] New IP - From "+CurrentIP+" to "+NewIP) + os.system("echo [ip2e-daemon] New IP - From "+CurrentIP+" to "+NewIP+" >> ip2e.log") + MailMessage="[ip2e-daemon] Email was sent successfully" + try: + os.system("sendEmail -q -f "+FromEmail+" -t "+ToEmail+" -u '[ip2e-daemon] IP has changed' -m 'ip2e - New IP is '"+NewIP+" -s "+SmtpFromEmail+" -xu "+FromEmailUser+" -xp "+FromEmailPass) + except: + MailMessage="[ip2e-daemon] Fail to send email" + print (MailMessage+" ("+ToEmail+")") + os.system("echo "+MailMessage+" to "+ToEmail+" >> ip2e.log") + if os.name == "posix": + os.system("rm current-ip.py") + elif os.name == "nt": + os.system("del current-ip.py") + def createNewip2eIPcf(): + ip2eIPcf=open('current-ip.py','w') + ip2eIPcf.close() + def writeNewip2eIPcf(): + ip2eIPcf=open('current-ip.py','a') + ip2eIPcf.write('CurrentIP="'+NewIP+'"\n') + ip2eIPcf.close() + createNewip2eIPcf() + writeNewip2eIPcf() + print ("[ip2e-daemon] Next update in 10 minutes...") + os.system("echo [ip2e-daemon] Next update in 10 minutes... >> ip2e.log") + WaitTenMinutes() diff --git a/ip2e-log.py b/ip2e-log.py new file mode 100755 index 0000000..bdd07c6 --- /dev/null +++ b/ip2e-log.py @@ -0,0 +1,83 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +# -------------------------------------------------------------- +# ip2e (IP to email) - See the log file. | +# Created by clamsawd (clamsawd@openmailbox.org) | +# Licensed by GPL v.3 | +# Last update: 27-10-2015 | +# | +# Dependences: curl, wget, sendEmail, libio-socket-ssl-perl | +# Compatible with Python 3.x | +# -------------------------------------------------------------- +version="0.3-alpha" + +#Import python-modules +import os +import sys + +#Check if your system use Python 3.x +if sys.version_info<(3,0): + print ("") + print ("You need python 3.x to run this program.") + print ("") + exit(1) + +#Function to clear screen +def ClearScreen(): + if os.name == "posix": + os.system("clear") + elif os.name == "nt": + os.system("cls") + else: + print ("Error: Unable clear screen") + +#Detect system & PATH of user folder +if os.name == "posix": + os.chdir(os.environ["HOME"]) + print ("POSIX detected") +elif os.name == "nt": + os.chdir(os.environ["USERPROFILE"]) + print ("Windows detected") + +if not os.path.exists(".ip2e"): + os.makedirs(".ip2e") + os.chdir(".ip2e") +if os.path.exists(".ip2e"): + os.chdir(".ip2e") + +#Check if exists 'ip2e-conf.py' +def createip2ecf(): + ip2ecf=open('ip2e-conf.py','w') + ip2ecf.close() +def writeip2ecf(): + ip2ecf=open('ip2e-conf.py','a') + ip2ecf.write('# sample configuration file of ip2e\n') + ip2ecf.write('\n') + ip2ecf.write('FromEmail="ip2e@daemon"\n') + ip2ecf.write('FromEmailUser="unknown"\n') + ip2ecf.write('FromEmailPass="password-here"\n') + ip2ecf.write('SmtpFromEmail="smtp.email.com"\n') + ip2ecf.write('ToEmail="unknown@email.com"\n') + ip2ecf.close() + +if os.path.isfile("ip2e-conf.py"): + print ("ip2e-conf.py exists") +else: + print ("ip2e-conf.py created") + createip2ecf() + writeip2ecf() + +#See the log file +if os.path.isfile("ip2e.log"): + print ("ip2e.log exists") + ClearScreen() + if os.name == "posix": + os.system("cat ip2e.log") + elif os.name == "nt": + os.system("type ip2e.log") +else: + ClearScreen() + print ("") + print ("ip2e.log doesn't exist.") + print ("")