added some code to the service classes; no working code; mostly boilerplate...

This commit is contained in:
Johannes Findeisen 2013-06-05 04:20:26 +02:00
commit e9be20ecf0
5 changed files with 117 additions and 35 deletions

View file

@ -1,5 +1,8 @@
""" """
The htmlcontent service in pure Python. STUPID NAME!!! The htmlcontent service in pure Python. STUPID NAME!!!
This should just return 0 on success and NOT 0 on error. Just to make internals generic to just report this code and
not use a parser.
""" """
# http://pycurl.sourceforge.net/ --- seems old... # http://pycurl.sourceforge.net/ --- seems old...
@ -7,4 +10,42 @@ The htmlcontent service in pure Python. STUPID NAME!!!
# #
# maybe better: http://docs.python.org/2/library/urllib.html # maybe better: http://docs.python.org/2/library/urllib.html
# #
# or look at tcpconnect.py! could be useful to. # or look at tcpconnect.py! could be useful to.
import socket
import sys
from service import Service
class HtmlcontentService(Service):
def __init__(self, parser, log, **kwargs):
super(Service, self).__init__(parser)
if "string" in kwargs:
self.string = kwargs["string"]
else:
log.w("There is no string set to match")
def execute(self):
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error, msg:
sys.stderr.write("[ERROR] %s\n" % msg[1])
sys.exit(1)
try:
sock.connect((self.host, self.port))
except socket.error, msg:
sys.stderr.write("[ERROR] %s\n" % msg[1])
sys.exit(2)
sock.send("GET %s HTTP/1.0\r\nHost: %s\r\n\r\n" % (self.path, self.host))
data = sock.recv(1024)
string = ""
while len(data):
string = string + data
data = sock.recv(1024)
sock.close()
#print string
# make substring in string compare here. regex or so...

View file

@ -1,6 +1,8 @@
class Service: class Service:
def __init__(self, parser): def __init__(self, host, parser):
self.host = host
self.parser = parser self.parser = parser
self.errorcode = 0
def _execute(self): def _execute(self):
self.pre_execute() self.pre_execute()

View file

@ -1,6 +1,5 @@
""" """
The shell service. This is for executing services as shell commands The shell service. This is for executing local shell commands and retrieve the output.
and don't use a builtin function. This is useful to be free to do what you want.
""" """
from service import Service from service import Service

View file

@ -1,5 +1,43 @@
""" """
The ssh service in pure Python. The ssh service This is for executing remote shell commands and retrieve the output.
This service is using paramiko (http://www.lag.net/paramiko/).
""" """
# http://www.lag.net/paramiko/ import paramiko
import pprint
import os
from service import Service
class SshService(Service):
def __init__(self, parser, log, **kwargs):
super(Service, self).__init__(parser)
if "command" in kwargs:
self.command = kwargs["command"]
else:
log.w("There is no command")
def execute(self):
path = os.path.join(os.environ['HOME'], '.ssh', 'id_rsa')
key = paramiko.RSAKey.from_private_key_file(path)
client = paramiko.SSHClient()
client.get_host_keys().add('hanez.org', 'ssh-rsa', key)
pprint.pprint(client._host_keys)
client.connect('hanez.org', username='hanez')
#self.command.call() ist dann das:
stdin, stdout, stderr = client.exec_command('ls')
for line in stdout:
print '... ' + line.strip('\n')
client.close()
# def main():
# # service = SshService(parser, log, command='uptime')
# return
#
# if __name__ == "__main__":
# main()

View file

@ -1,33 +1,35 @@
""" """
The tcpconnect service in pure Python. The tcpconnect service. This is to check if a service on a specific port is reachable.
This should just return 0 on success and NOT 0 on error. Just to make internals generic to just report this code and
not use a parser.
""" """
import socket import socket
import sys from service import Service
HOST = 'linspector.org'
GET = '/index.html'
PORT = 80
try: class TcpconnectService(Service):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) def __init__(self, parser, log, **kwargs):
except socket.error, msg: super(Service, self).__init__(parser)
sys.stderr.write("[ERROR] %s\n" % msg[1])
sys.exit(1)
try: if "port" in kwargs:
sock.connect((HOST, PORT)) self.port = kwargs["port"]
except socket.error, msg: else:
sys.stderr.write("[ERROR] %s\n" % msg[1]) log.w("There is no port set")
sys.exit(2)
sock.send("GET %s HTTP/1.0\r\nHost: %s\r\n\r\n" % (GET, HOST)) def execute(self, log):
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error, msg:
log.w("%s\n" % msg[1])
self.errorcode = 1
data = sock.recv(1024) try:
string = "" sock.connect((self.host, self.port))
while len(data): except socket.error, msg:
string = string + data log.w("%s\n" % msg[1])
data = sock.recv(1024) self.errorcode = 2
sock.close()
print string sock.close()
return