# code by Georgi Talmazov - netskay
# license - open source
# main.py
from twisted.web.client import getPage
from twisted.internet import reactor, defer, task
import re
import os
import smtp
def content(page):
inetip=re.findall("\d+\.\d+\.\d+\.\d+", page)
networkip=os.popen("ipconfig").readlines()
for line in networkip:
regex=re.findall("[192]+\.[168]+\.\d+\.\d+", line)
if not regex==[]:
iplist.append(regex[0])
iplist.sort()
p=0
for i in xrange(1,len(iplist)):
if iplist[i] != iplist[p]:
p=p+1
iplist[p]=iplist[i]
del iplist[p+1:]
iplistbool=[]
for ip in prevdict['previplist']:
if not ip in iplist:
iplistbool.append(False)
else: iplistbool.append(True)
if not (inetip[0]==prevdict['previnetip'] or True in iplistbool):
print '--> IP Change'
print '::internet: %s'%inetip[0]
for ip in iplist:
print '::intranet: %s'%ip
data={}
mail=smtp.zSMTP()
data['destination']=['my_email@my_domain.com']
data['header']='Cube Studios - IP Update'
data['payload']='New IP assignments on the network.\n\ninternet: %s\nintranet: '%inetip[0]
for ip in iplist:
data['payload']=data['payload']+'%s, '%ip
data['payload']=data['payload'][:-2]
mail.send(data)
prevdict['previplist']=iplist
prevdict['previnetip']=inetip[0]
def netError(data):
print data
def query():
deferred = getPage('http://ip-adress.com/')
deferred.addCallback(content)
deferred.addErrback(netError)
print '--> IP Notifier 0.1 by NetSkay - Georgi Talmazov\nInternet\--> Intranet Server IP notification vie email.\n'
iplist=[]
prevdict={}
prevdict['previplist']=[]
prevdict['previnetip']=None
lc = task.LoopingCall(query)
lc.start(86400) #86400 seconds in 24 hours
print '--> Initiating reactor service.'
reactor.run()
print '--> Reactor stopped!'
############################################################
# smtp.py
from twisted.internet.threads import deferToThread
from email.mime.multipart import MIMEMultipart, MIMEBase
from email import encoders
import sys, mimetypes, os
import smtplib
class zSMTP:
def buildMessage(self,fromaddr, toaddr, subject, body):
message=MIMEMultipart()
message['From']=fromaddr
message['To']=toaddr
message['Subject']=subject
textPart=MIMEBase('text', 'plain')
textPart.set_payload(body)
message .attach(textPart)
return message
def sendComplete(self, data, emails):
#log.zlog.info('Sent log err;to=%s ::-:: %s'%(emails, data))
print 'email sent to %s' %emails
def send(self, data):
try:
mailServer = smtplib.SMTP("smtp.gmail.com", 587)
mailServer.ehlo()
mailServer.starttls()
mailServer.ehlo()
mailServer.login('mail@mydomain.com', 'mypassword')
for recvr in data['destination']:
msg=self.buildMessage( 'mail@mydomain.com', recvr, data['header'], data['payload'])
msgData=msg.as_string(unixfrom=False)
mailServer.sendmail('cube3d.designs@gmail.com', recvr, msgData)
mailServer.close()
self.sendComplete(data['header'], data['destination'])
except Exception, e:
#log.zlog.error('ERROR @ SMTP Mod:::%s'%(e))
print 'received error at %s'%e
@classmethod
def email(self, **data):
deferToThread(self.send, data)