Python Server Check über Klasse

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

Daten

  • cat server_check.list
waka.xinux.org;80,443,389,636
caprica.xinux.org;80,443,389,636
doom.xinux.org;80,443
saubock.xinux.org;56,78

Skript

#!/usr/bin/python3
import os
import sys
import socket
import datetime
from pythonping import ping
dat_sys=sys.argv[1]
dat=open(dat_sys,"r")

class server_check_class(object):
  def __init__(self,hostname,portlist):
     self.hostname = hostname
     self.portlist = portlist

  def __dns_check(self):
    try:
      ip = socket.gethostbyname(self.hostname)
      return 1
    except socket.error:
      return 0

  def host_status(self):
    if self.__dns_check():
      if ping(self.hostname, timeout=100, count=1):
        return 1
      else:
        return 0
    else:
       return 0

  def port_status(self):
    for port in (self.portlist.split(",")):
      socket.setdefaulttimeout(1)
      start_time = datetime.datetime.now()
      try:
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        connect = sock.connect_ex((self.hostname, int(port)))
        if connect == 0:
          print(" port status "  +  self.hostname + " " +  port  + " ok")
        else:
          print(" port status "  +  self.hostname + " " +  port  + " not ok")
          sock.close()
      except socket.error:
          print(" port status except"  +  self.hostname + " " +  port  + " not ok")
      end_time = datetime.datetime.now()

for l in dat:
    line = l.rstrip().split(";")
    x = server_check_class(line[0],line[1])
    if x.host_status():
     x.port_status()
    else:
     print(line[0] + " not reachable")
dat.close()