一个python的网络日志系统

服务器端的代码就是在python的官方文档上摘的,只是将日志的配置方式改为从文件读取。
服务器端LogServer.py代码
  1. #coding:utf-8
  2. import cPickle
  3. import logging
  4. import logging.handlers
  5. import SocketServer
  6. import struct
  7. import logging.config
  8. class LogRecordStreamHandler(SocketServer.StreamRequestHandler):
  9.     """Handler for a streaming logging request.
  10.     This basically logs the record using whatever logging policy is
  11.     configured locally.
  12.     """
  13.     def handle(self):
  14.         """
  15.         Handle multiple requests - each expected to be a 4-byte length,
  16.         followed by the LogRecord in pickle format. Logs the record
  17.         according to whatever policy is configured locally.
  18.         """
  19.         while 1:
  20.             chunk = self.connection.recv(4)
  21.             if len(chunk) < 4:
  22.                 break
  23.             slen = struct.unpack(">L", chunk)[0]
  24.             chunk = self.connection.recv(slen)
  25.             while len(chunk) < slen:
  26.                 chunk = chunk + self.connection.recv(slen - len(chunk))
  27.             obj = self.unPickle(chunk)
  28.             record = logging.makeLogRecord(obj)
  29.             self.handleLogRecord(record)
  30.     def unPickle(self, data):
  31.         return cPickle.loads(data)
  32.     def handleLogRecord(self, record):
  33.         # if a name is specified, we use the named logger rather than the one
  34.         # implied by the record.
  35.         if self.server.logname is not None:
  36.             name = self.server.logname
  37.         else:
  38.             name = record.name
  39.         logger = logging.getLogger(name)
  40.         # N.B. EVERY record gets logged. This is because Logger.handle
  41.         # is normally called AFTER logger-level filtering. If you want
  42.         # to do filtering, do it at the client end to save wasting
  43.         # cycles and network bandwidth!
  44.         logger.handle(record)
  45. class LogRecordSocketReceiver(SocketServer.ThreadingTCPServer):
  46.     """simple TCP socket-based logging receiver suitable for testing.
  47.     """
  48.     allow_reuse_address = 1
  49.     def __init__(self, host='localhost',
  50.                  port=logging.handlers.DEFAULT_TCP_LOGGING_PORT,
  51.                  handler=LogRecordStreamHandler):
  52.         SocketServer.ThreadingTCPServer.__init__(self, (host, port), handler)
  53.         self.abort = 0
  54.         self.timeout = 1
  55.         self.logname = None
  56.     def serve_until_stopped(self):
  57.         import select
  58.         abort = 0
  59.         while not abort:
  60.             rd, wr, ex = select.select([self.socket.fileno()],
  61.                                        [], [],
  62.                                        self.timeout)
  63.             if rd:
  64.                 self.handle_request()
  65.             abort = self.abort
  66. def main():
  67.     logging.config.fileConfig('log.conf')    #通过配置文件来读取日志的配置
  68.     tcpserver = LogRecordSocketReceiver()
  69.     print "About to start TCP server..."
  70.     tcpserver.serve_until_stopped()
  71. if __name__ == "__main__":
  72.     main()
客户端LogClient.py直接根据传过来的日志名来生成日志

  1. #coding:utf-8
  2. import logging, logging.handlers
  3. def getLogger( loggerName ):
  4.     logger = logging.getLogger( loggerName )
  5.     logger.setLevel(logging.DEBUG)
  6.     socketHandler = logging.handlers.SocketHandler('localhost',/
  7.                     logging.handlers.DEFAULT_TCP_LOGGING_PORT)
  8.     logger.addHandler(socketHandler)
  9.     return logger
  10.     
  11. def setLevel( loggerName,level ):
  12.     logger = logging.getLogger( "loggerName" )
  13.     logger.setLevel( level )
下面是对python客户端的进一步封装,这样就更加方便对日志的使用
LogFunc.py
  1. #coding:utf-8
  2. import LogClient
  3. logger = LogClient.getLogger("pgt")
  4. def LogDebug(msg):
  5.     logger.debug(msg)
  6.     
  7. def LogInfo(msg):
  8.     logger.info(msg)
  9.     
  10. def LogWarn(msg):
  11.     logger.warn(msg)
  12.     
  13. def LogError(msg):
  14.     logger.error(msg)
  15.     
  16. def LogFatal(msg):
  17.     logger.fatal(msg)
整个日志系统,服务器端的.py文件通过循环不断的接收和处理来自客户端的请求。
客户端通过一个SocketHandler与服务器端通讯。整个系统中服务器端和客户端可以部署在不同的机器上,记录的日志放在服务器端(可在服务器上的配置文件中指定日志文件存放的路径)。
LogFunc.py文件是客户端的进一步封装。方便了整个日志系统的使用。这样只要在要写的python文件中import了LogFunc,然后调用相关的LogInfo等函数就可以记录日志了。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作为一个AI语言模型,我可以帮助您提供一些实现入侵检测系统的思路和关键技术。 入侵检测是指通过对网络流量、系统日志等进行监控和分析,及时发现并响应网络攻击行为,保障信息系统的安全与稳定。下面是一个简单的流程,可以作为入侵检测系统的框架: 1. 数据采集:收集目标主机的网络流量、系统日志等信息。 2. 数据预处理:对采集到的数据进行清洗、转换、标准化等处理,以便后续分析使用。 3. 特征提取:从预处理后的数据中提取有用的特征,如IP地址、端口号、协议类型、传输速率、异常行为等。 4. 模型构建:基于已知攻击行为和正常行为的数据集,构建机器学习模型或深度学习模型,用于分类判断流量是否为攻击行为。 5. 模型训练和优化:使用训练集进行模型训练,并通过验证集进行模型参数调整和优化,以提高模型在未知数据上的泛化能力。 6. 流量监控和实时检测:将模型部署到实际环境中,并对流量进行实时监控和检测,及时发现异常情况。 7. 响应与修复:对检测到的攻击行为进行响应和修复,如封锁IP地址、禁止端口、追踪攻击来源等。 关键技术: 1. 数据采集技术:可以使用网络流量嗅探器、系统日志监控软件等工具进行数据采集。 2. 数据预处理技术:可以使用Python编写数据清洗、转换、标准化等预处理程序。 3. 特征提取技术:可以使用Python编写特征提取程序,提取有用的特征。 4. 机器学习和深度学习技术:可以使用Python编写机器学习和深度学习模型,进行流量分类和异常检测。 5. 模型训练和优化技术:可以使用Python编写模型训练和优化程序,使用交叉验证、网格搜索等技术进行模型优化。 6. 实时检测技术:可以使用Python编写实时检测程序,对流量进行实时监控和分析,及时发现异常情况。 7. 响应与修复技术:可以使用Python编写响应和修复程序,对检测到的攻击行为进行响应和修复。 当然,以上只是一个简单的框架和技术方案,实际应用中还需要根据具体情况进行调整和优化。希望这些信息对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值