JSShell:一个基于python的交互式Shell
JSShell
本文将给大家介绍一款基于Web的多用户交互式Shell,该工具采用Python语言编写,服务器端使用的是Flask框架,而客户端当然就是JavaScript和HTML组成的了。我当初在开发JSShell的时候只是想在测试和研究的过程中用它来远程调试浏览器的网络通信和信息处理等活动,但是我现在意识到了这款工具的作用远远不止于此,所以请各位不要将其用于恶意目的,作者Daniel Abeles对此一概不负责。
工具安装
话不多说,先上GitHub传送门【点击文末阅读原文】。
我们建议使用虚拟环境来安装JSShell,作者使用的是Python3.6,但JSShell也支持3.6之前的Python版本。
Pyenv
pyenv virtualenv -p python3.6 venv
pyenv activate venv
virtualenv
virtualenv -p python3.6 venv
source venv/bin/activate
一键配置环境
pip install -r requirements.txt
JSShell的特点
-支持多客户端; -支持循环DOM对象; -预生成脚本; -命令队列;
工具运行
创建数据库:
python db_handler.py create
开启服务器(后台):
python run.py
通过浏览器访问服务器地址:
如果你的服务器在本地,那么你可以直接用浏览器访问http://localhost:5000(端口可能会不同)
打开交互式Shell:
python shell.py
可选项:预生成脚本
每当新的客户端进行注册时,这些脚本都将会运行,不过你也可以根据你的需要来进行修改,一切都取决于你自己:)
工具使用
这个Shell接口给我们提供了多种可用的操作指令,你可以使用‘help’命令来查看所有命令,终端界面如下所示:
你可以使用命令队列来申请执行多个命令,客户端将会一个一个执行这些命令。所有的命令都会在相同的环境(context)中执行,所以你可以一次性执行多个相关命令。
如果你想查看发送给客户端的命令,首先你需要选择一个客户端:
>> select 1
然后使用‘coms’命令来查看所有发送给该客户端的命令:
(Client 1) >> coms
查看所有的命令以及相应的输出结果:
(Client 1) >> com 1
工作流程
当所有的安装和配置都已完成之后,JSShell的工作流程如下:
1. 客户端访问主页http://localhost:5000/; 2. 然后向服务器端发送一个‘register’请求; 3. 等待用户输入命令; 4. 与此同时,你可以使用shell.py脚本并在服务器端执行命令; 5. 客户端从服务器端获取命令,当其得到了新的命令之后,会立刻将其加入队列并依次执行; 6. 命令执行完成之后,会将执行结果返回给服务器端; 7. 现在,我们可以使用‘coms’命令来查看输出结果了;
数据库管理
我们在这里给大家提供了一个名为db.handler.py的脚本,这个脚本包含多种数据库管理功能,你可以用它来管理和测试你的数据库。
- 设计模式专题(十九) ——命令模式
- Thinking in SQL系列之:数据挖掘K均值聚类算法与城市分级
- 设计模式专题(二十) ——职责链模式
- 设计模式专题(二十一) ——中介者模式
- 设计模式专题(二十二) ——享元模式
- 设计模式专题(二十三) ——解释器模式
- Thinking in SQL系列之数据挖掘C4.5决策树算法
- 设计模式专题(二十四) ——访问者模式
- PHP实用功能——modern PHP读书笔记(一)
- ModernPHP读书笔记(二) ——PHP开发标准
- iBatis.Net(6):Data Map(深入)
- iBatis.Net(5):Data Map(了解)
- ModernPHP读书笔记(三)——PHP的良好实践
- PHP开发过程的那些坑(一) ——对象拷贝
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法