python 监听服务端的某端口报文收发情况
Python 端口 情况 监听 服务端 报文 收发
2023-09-14 09:01:11 时间
如下应用实现监听服务器上某个端口的报文收发情况:使用方法是将该python脚本保存至py文件XX.py中,并执行python XX.py即可前台启动,发起请求后即可通过该py应用打印请求报文和响应报文。
#! /usr/bin/env python # -*- coding: utf-8 -*- from wsgiref.simple_server import make_server from cgi import parse_qs,escape import datetime,os,logging,re from logging.handlers import TimedRotatingFileHandler #全局变量 tree_result_list={} xml_sub_list=[] def console_log_out(logFilename): ''''' Output log to file ''' # 初始化并定义级别 logger = logging.getLogger() # 初始化 logger.setLevel(logging.INFO) # 指明了将会分发日志的最低级别 #TimedRotatingFileHandler()按照时间自动分割日志文件 fh=TimedRotatingFileHandler(logFilename,when='D',interval=1,backupCount=3) fh.suffix="%Y%m%d.log" #Formatter对象设置日志信息最后的规则、结构和内容 formatter = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s') fh.setFormatter(formatter)#该处理器选择一个格式化器 logger.addHandler(fh)# 把对象加到logger里 cs=logging.StreamHandler()#往屏幕上输出 cs.setFormatter(formatter)#设置屏幕上显示的格式 logger.addHandler(cs)# 把对象加到logger里 def application(environ,start_response): #功能说明:服务端应用程序,实现实时获取充值请求报文数据并保存至文件,返回请求响应报文并保存至文件中 #by xiaocc[2018-7-5] #CONTENT_LENGTH 可能为空,或者没有 #客户端请求信息放到环境变量environ中 envdate = [ '%s: %s' % (key, value) for key, value in sorted(environ.items()) ] envdate = '\n'.join(envdate) # 由于下面将Content-Type设置为text/plain,所以`\n`在浏览器中会起到换行的作用 print '-------------------start-------------------' print 'environment item values: \n',envdate print '-------------------end-------------------' print 'environment CONTENT-LENGTH is : ',environ.get('CONTENT_LENGTH') try: request_body_size=int(environ.get('CONTENT_LENGTH',0)) logging.info('notifyrequest_body_size: %s' % request_body_size) except(ValueError): request_body_size=0 logging.error('notifyrequest_body_size: %s' % request_body_size) #通过 wsgi.input获取请求数据 request_body=environ['wsgi.input'].read(request_body_size) logging.info( '原始请求报文: %s' % request_body) d=parse_qs(request_body) logging.info( '处理后的客户端发送的请求报文 notifyreqeust_body_data: %s' % d) #生成请求响应报文 response_body='no response' status='200 OK' response_headers=[ ('Content-Type','text/xml'), ('Content-Length',str(len(response_body))) ] start_response(status, response_headers) logging.info('成功发送响应报文到客户端') return [response_body] console_log_out('log.txt') httpd=make_server('', 8079, application) #可以根据需监听的端口修改 logging.info('serving HTTP on port 8079.....') httpd.serve_forever()
相关文章
- pycharm打包python项目_Python怎么打包
- python十进制转换_Python 进制转换
- 通过Kivy将Python文件打包成apk
- Python中psutil模块应用
- Python代码异常
- Python 对linux系统操作
- Python: 通过Ghostscript压缩pdf文件
- Python编程 pip的安装与使用
- 【说站】python vim模块的函数接口
- 【说站】python元组和列表的不同点
- 【测试开发】python系列教程:第一个Python程序
- Python标识符的命名规则,下列哪些是对的?_python标识符不能使用关键字
- python udp编程_Python核心编程
- 基于Python的OpenCV有关像素的操作
- 软件测试|Python中is和==的区别
- java和python 编写贪吃蛇游戏
- 【错误记录】Mac 中 IntelliJ IDEA 运行 Python 程序报错 ( pip 21.0 will drop support for Python 2.7 in January 20 )
- python中%r和%s的区别详解编程语言
- Python 之禅:时机最重要
- Python操作MySQL数据库的必备模块mysqlpython(mysql_python)
- Python类的基础入门知识