python 實現簡單的SYSLOG服務器,并寫入MYSQL數據庫

jopen 12年前發布 | 3K 次閱讀 資源管理器 ActionScript 來往

依賴myssqldb模塊,適用于windows平臺。此代碼為初學python練手代碼,拙劣之處還請見諒。

import os,socket,sys,time,string
import MySQLdb
bufsize=1500
port=514

syslog_serverty={ 0:"emergency", 1:"alert", 2:"critical", 3:"error", 4:"warning", 5:"notice", 6:"info", 7:"debug" } syslog_facility={ 0:"kernel", 1:"user", 2:"mail", 3:"daemaon", 4:"auth", 5:"syslog", 6:"lpr", 7:"news", 8:"uucp", 9:"cron", 10:"authpriv", 11:"ftp", 12:"ntp", 13:"security", 14:"console", 15:"cron", 16:"local 0", 17:"local 1", 18:"local 2", 19:"local 3", 20:"local 4", 21:"local 5", 22:"local 6", 23:"local 7" }

try: sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) sock.bind(("0.0.0.0",port)) except: print("error bind") sys.exit(1) sql_em="insert into emergency values(%s,%s,%s,%s,%s,%s)" sql_al="insert into alert values(%s,%s,%s,%s,%s,%s)" sql_cr="insert into critical values(%s,%s,%s,%s,%s,%s)" sql_er="insert into error values(%s,%s,%s,%s,%s,%s)" sql_wa="insert into warning values(%s,%s,%s,%s,%s,%s)" conn=MySQLdb.connect(host="127.0.0.1",db="syslog",port=18888,user="root",passwd="cinda") curs=conn.cursor()

f=file("syslog.txt","w")

print ("----------------syslog is start----------------\n") try: while 1: try: data,addr=sock.recvfrom(bufsize)

  #print data,addr
  syslog=str(data)
  n=syslog.find('>')
  serverty=string.atoi(syslog[1:n])&0x0007
  facility=(string.atoi(syslog[1:n])&0x03f8)>>3
  syslog_msg=syslog[26:]
  dev_name=syslog_msg[:syslog_msg.find(' ')]
  dev_msg=syslog_msg[syslog_msg.find(' '):]
  param=(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()),dev_name,addr[0],syslog_facility[facility],syslog_serverty[serverty],dev_msg)

  if serverty==0:
    curs.execute(sql_em,param)
    print syslog_msg
  elif serverty==1:
    curs.execute(sql_al,param)
    print syslog_msg
  elif serverty==2:
    curs.execute(sql_cr,param)
    print syslog_msg
  elif serverty==3:
    curs.execute(sql_er,param)
    print syslog_msg
  elif serverty==4:
    curs.execute(sql_wa,param)
    print syslog_msg

  conn.commit()

  #print dev_msg,time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
  #print syslog_serverty[serverty],syslog_facility[facility],syslog[26:]
  #f.writelines(syslog_serverty[serverty]+" "+syslog_facility[facility]+" "+syslog[26:]+'\n')
except socket.error:
  pass

except KeyboardInterrupt: curs.close() conn.close() print ("------------------syslogd stop-------------\n") print "good bye" sys.exit()

f.close</pre>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!