#!/usr/bin/env python
#
RCSID="$Id: selfcheck,v 1.2 2006/11/08 15:16:41 andreas Exp $"
# check internet connectivity
#
import os, sys, string, time, socket
PPPIF="pppoe0"
DBG=0
ADDR="204.29.161.33"
PORT=50003
def sendheartbeatmsg(tosend):
iam=socket.gethostname()
sock=socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
msgboot="msg=%s;service=%s;name=%s" % (tosend, "selfcheck", iam)
sock.sendto(msgboot, (ADDR, PORT))
time.sleep(1)
sock.close()
class Pppoe:
def __init__(self, interface):
DBG=0
self.interface=interface
self.foundauthinfo=0
fh=os.popen("/sbin/pppoectl %s" % self.interface,"r")
while 1:
l=fh.readline()
if len(l) == 0:
fh.close()
break
if DBG: print l[:-1]
r=string.split(l[:-1])
if DBG: print r
if r[0] == self.interface+':':
s=string.split(r[1],'=')
self.phase=s[1]
elif r[0][:11] == 'myauthproto':
self.myauthproto=r[0][12:]
self.myauthname=r[1][11:]
self.foundauthinfo=1
elif r[0] == 'lcp' and r[1] == 'timeout:':
self.lcptimeount=r[2]
elif r[0] == 'idle' and r[1] == 'timeout' and r[2] == "=":
self.idletimeout=r[3]
elif r[0] == 'max-auth-failure' and r[1] == '=':
self.maxauthfailure=r[2]
elif r[0] == 'max-noreceive' and r[1] == '=':
self.maxnoreceive=string.join(r[2:], ' ')
elif r[0] == 'max-alive-missed' and r[1] == '=':
self.maxalivemissed = string.join(r[2:], ' ')
fh=os.popen("/sbin/pppoectl -d %s" % self.interface,"r")
while 1:
l=fh.readline()
if len(l) == 0:
fh.close()
break
if DBG: print l[:-1]
r=string.split(l[:-1])
if DBG: print r
if r[0] == self.interface+':':
self.state=string.join(r[3:],' ')
elif r[0] == 'Session' and r[1] == 'ID:':
self.sessionid=r[2]
elif r[0] == 'PADI' and r[1] == 'retries:':
self.PADIretries=r[2]
elif r[0] == 'PADR' and r[1] == 'retries:':
self.PADRretries=r[2]
fh=os.popen("/sbin/ifconfig %s" % self.interface,"r")
if DBG: print fh
self.foundinet=0
while 1:
l=fh.readline()
if len(l) == 0:
fh.close()
break
if DBG: print l[:-1]
r=string.split(l[:-1])
if DBG: print r
if r[0] == self.interface+':':
s=string.split(r[1],'=')
s1=string.split(s[1],'<')
self.flagshex=s1[0]
self.flags=string.split(s1[1][:-1],',')
self.mtu=r[3]
elif r[0] == 'inet':
self.foundinet=1
self.ipaddr=r[1]
self.ipgw=r[3]
self.ipmask=r[5]
def __repr__(self):
r=[]
keys=self.__dict__.keys()
keys.sort()
for k in keys:
r.append("%-14s: %s" % (k, self.__dict__[k]))
return string.join(r,'\n')
def notee():
if not self.foundauthinfo:
print"PROBLEM: no login info configured, use \n'pppoectl %s myauthproto=pap myauthname=\"
[",len(l2),l2[:-2],"]" sys.stdout.flush() if l2[:-2] == "": break lines.append(l2[:-2]) uri=string.split(lines[0],' ')[1] if uri != '/favicon.ico': sendheartbeatmsg(uri) date=time.strftime("%a, %d %b %Y %H:%M:%S GMT", time.gmtime()) if uri != "/selfcheck": print "HTTP/1.1 404 Not Found" print "Date: %s" % date print "Connection: close" print "Content-Type: text/html; charset=iso-8859-1" print "" print "Nothing here, move along.." sys.exit(0) print """HTTP/1.1 200 OK Date: %s Server: Selfcheck/1.0 (Python) Last-Modified: %s Accept-Ranges: bytes Connection: close Content-Type: text/html; charset=ISO-8859-1""" % (date, date) print """
"""
print "Current Time: %s" % date
print "Machine: %s" % uname[1]
print "OS: %s" % uname[0]+"/"+uname[4]+" "+uname[2]
print "Uptime: ",
sys.stdout.flush()
os.system("uptime")
print "
"
print "Checking interface %s" % PPPIF
IF=Pppoe(PPPIF)
print checkall(IF)
print "
"
print "Additional information"
print "
Users"
sys.stdout.flush()
os.system("w")
print "
"
print "Interface data"
print IF
print
print "
"
if 0:
print "Ping"
sys.stdout.flush()
ec=os.system("/sbin/ping -n -q -c 3 204.29.161.37")
if ec != 0:
print " ping failed!"
else:
print "Traceroute"
sys.stdout.flush()
# ec=os.system("/usr/sbin/traceroute -w 2 204.29.161.37")
ec=os.system("/usr/pkg/sbin/mtr -r -c 2 204.29.161.37")
if ec != 0:
print " traceroute failed!"
print "
"
print "Routing Table"
sys.stdout.flush()
os.system("/usr/bin/netstat -rnLfinet")
print "
"
print "Relevant log entries"
sys.stdout.flush()
os.system("grep %s: /var/log/messages" % IF.interface)
if DBG:
for l in lines:
print l
print ""
print "All done"
print ""
print ""