Python 简易web日志查看工具&可改装为命令行工具
Python 简易web日志查看工具&可改装为命令行工具
效果图





原理
利用python的paramiko库模拟ssh登录操作,并执行tail命令
所需库
flask、paramiko、gevent,python3
部分代码
@app.route('/api/do', methods=["POST", "GET"])
def api_do():
try:
ip = flask.request.form.get("ip")
port = flask.request.form.get("port")
username = flask.request.form.get("username")
password = flask.request.form.get("password")
path = flask.request.form.get("path")
count = flask.request.form.get("count")
except:
return {
"status": "err",
"code": "200",
"error": "params error"
}
if ip is None:
ip = "127.0.0.1"
if port is None:
port = 22
if username is None:
username = "root"
if password is None:
password = "root"
if path is None:
path = "/usr/local/logs"
if count is None:
count = 100
if tool.check_ip(ip) is False:
return {
"status": "err",
"code": "202",
"error": "ip error"
}
if tool.check_file(path) is False:
return {
"status": "err",
"code": "203",
"error": "file path error or forbid"
}
tf, ssh = tail.get_ssh(ip, username, password, port=port)
if tf is False:
return {
"status": "err",
"code": "201",
"error": "ssh login error"
}
res = tail.tail_one(ssh, path, count=count)
return res
def get_ssh(ip, username, password, port=22):
# 实例化SSHClient
client = pm.SSHClient()
# 自动添加策略,保存服务器的主机名和密钥信息,如果不添加,那么不再本地know_hosts文件中记录的主机将无法连接
client.set_missing_host_key_policy(pm.AutoAddPolicy())
# 连接SSH服务端,以用户名和密码进行认证
try:
client.connect(hostname=ip, port=port, username=username, password=password)
except BaseException as e:
print(e)
return False, e
return True, client
def tail_one(ssh, path, count=100):
# 获取日志信息,传入利用get_ssh生成的client,路径,显示数量
cmd = "tail -n {count} {path}".format(count=count, path=path)
stdin, stdout, stderr = ssh.exec_command(cmd)
err = stderr.read().decode()
if len(err) != 0:
return {
"status": "err",
"code": "300",
"error": err
}
else:
return {
"status": "ok",
"code": "100",
"result": stdout.read().decode()
}
def check_ip(ip):
# 检查ip是否合法
ip_format = r'^((([1-2][0-9]{2})|([1-9][0-9])|([0-9]))[.]){3}(([1-2][0-9]{2})|([1-9][0-9])|([0-9]))$'
# ip_format = r'^[1-2]?[0-9]{1,2}.[1-2]?[0-9]{1,2}.[1-2]?[0-9]{1,2}.[1-2]?[0-9]{1,2}$'
match = re.search(ip_format, ip)
# print(match)
if match:
return match.group()
else:
return False
def check_file(path):
# 检查路径是否合法,限定使用区域,禁止执行其他命令
path_default = "/usr/local/logs"
forbid_word = r'&|\||[ ]|`|"|\''
allow_path = r'/usr/local/'
match = re.search(forbid_word, path)
if match:
return False
match = re.search(allow_path, path)
if match:
return path
else:
return False
Python 简易web日志查看工具&可改装为命令行工具的更多相关文章
- Expo大作战(六)--expo开发模式,expo中exp命令行工具,expo中如何查看日志log,expo中的调试方式
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,将全部来与官网 我猜去全部机翻+个人 ...
- x264源代码简单分析:x264命令行工具(x264.exe)
===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...
- Scrapy命令行工具简介
Windows 10家庭中文版,Python 3.6.4,virtualenv 16.0.0,Scrapy 1.5.0, 在最初使用Scrapy时,使用编辑器或IDE手动编写模块来创建爬虫(Spide ...
- OpenStack命令行工具与API
Openstack命令行工具 我们推荐Openstack命令行工具和Openstack的Dashboard两者结合使用.一些用户由于使用过其他云技术背景的,可能会使用EC2兼容的API,相对于我们需要 ...
- 2019-8-31-HttpRepl-互操作的-RESTful-HTTP-服务调试命令行工具
title author date CreateTime categories HttpRepl 互操作的 RESTful HTTP 服务调试命令行工具 lindexi 2019-08-31 16:5 ...
- HttpRepl 互操作的 RESTful HTTP 服务调试命令行工具
今天早上曽根セイラ告诉我一个好用的工具 HttpRepl 这是一个可以在命令行里面对 RESTful 的 HTTP 服务进行路由跳转和访问的命令行工具.可以使用 cd 这个命令和像文件跳转已经跳转到下 ...
- 使用.Net Core编写命令行工具(CLI)
命令行工具(CLI) 命令行工具(CLI)是在图形用户界面得到普及之前使用最为广泛的用户界面,它通常不支持鼠标,用户通过键盘输入指令,计算机接收到指令后,予以执行. 通常认为,命令行工具(CLI)没有 ...
- 吻逗死(windows)系统下自动部署脚本(for java spring*)及linux命令行工具
转载请注明出处:https://www.cnblogs.com/funnyzpc/p/10051647.html (^^)(^^)自動部署腳本原本在上個公司就在使用,由於近期同事需要手動部署一個Spr ...
- MySQL命令行工具各功能说明(转)
MySQL 服务器端使用工具程序 mysqld - SQL 后台程序(即 MySQL 服务器进程).该程序必须启动运行,才能连接服务器来访问数据库. mysqld_safe - 服务器启动脚本,可以通 ...
随机推荐
- python函数内容
在刚接触python的时候就有个疑问,什么是函数? python语言的函数和数学语言的函数有区别吗? 什么是函数 数学函数:给定一个数集A,假设其中的元素为x.现对A中的元素x施加对应法则f,记作f( ...
- pycharm添加断点,分段运行,以及继续运行;
1.打断点,只需在代码的前面单机左键即可:2.运行,点击Debug...(如图,像贝壳一样的图标),只会运行第一个红点前的代码: 3.此时若想将第2个红点前的代码运行完毕:点击Resume Progr ...
- 攻防世界pwn-Mary_Morton
题目连接 https://adworld.xctf.org.cn/media/task/attachments/532c53dce1ce4f5d88461e4c2a336468 友情连接 https: ...
- [C1W1] Neural Networks and Deep Learning - Introduction to Deep Learning
第一周:深度学习引言(Introduction to Deep Learning) 欢迎(Welcome) 深度学习改变了传统互联网业务,例如如网络搜索和广告.但是深度学习同时也使得许多新产品和企业以 ...
- 《阿里如何实现秒级百万TPS?搜索离线大数据平台架构解读》--阅读
离线?在阿里搜索工程体系中我们把搜索引擎.在线算分.SearchPlanner等ms级响应用户请求的服务称之为“在线”服务:与之相对应的,将各种来源数据转换处理后送入搜索引擎等“在线”服务的系统统称为 ...
- CF757F Team Rocket Rises Again
题意 建出最短路图(DAG)之后就跟这题一样了. code: #include<bits/stdc++.h> using namespace std; #define int long l ...
- SVN 中项目名字全是红色 和 文件夹图标上没标记绿钩解决办法
没有绿色标记卸载Tortoise 小乌龟重装 ! 红色名字是 原来idea当前的project用了版本控制器, 那么建到这个project下面的所有项目就都是加入到版本控制里面的, ...
- 【2019.8.11上午 慈溪模拟赛 T2】十七公斤重的文明(seventeen)(奇偶性讨论+动态规划)
题意转化 考虑我们对于集合中每一个\(i\),若\(i-2,i+k\)存在,就向其连边. 那么,一个合法的集合就需要满足,不会存在环. 这样问题转化到了图上,就变得具体了许多,也就更容易考虑.求解了. ...
- 第一行代码 Android (郭霖 著)
https://github.com/guolindev/booksource 第1章 开始启程----你的第一行Android代码 (已看) 第2章 先从看得到的入手----探究活动 (已看) 第3 ...
- java1.8 AQS AbstractQueuedSynchronizer学习
AQS concurrent并发包中非常重要的顶层锁类,往往用的比较多的是ReentrantLock,然而ReentrantLock的实现依赖AbstractQueuedSynchronizer在到上 ...