webshell交易原理(webshell扫描工具)

生活常识 2023-04-30 10:07生活常识www.baidianfengw.cn

  前言

  最近工作中需要开发前端操作远程虚拟机的功能,简称 WebShell。基于当前的技术栈为 react+django,调研了一会发现大部分的后端实现都是 django+channels 来实现 websocket 服务。

  大致看了下觉得这不够有趣,翻了翻 django 的官方文档发现 django 原生是不支持 websocket 的,但 django3 之后支持了 asgi 协议可以自己实现 websocket 服务。

  于是选定 gunicorn+uvicorn+asgi+websocket+django3.2+paramiko 来实现 WebShell。

  实现 websocket 服务

  使用 django 自带的脚手架生成的项目会自动生成 asgi.py 和 wsgi.py 两个文件,普通应用大部分用的都是 wsgi.py 配合 nginx 部署线上服务。

  这次主要使用 asgi.py 实现 websocket 服务的思路大致网上搜一下就能找到,主要就是实现

  connect/send/receive/disconnect 这个几个动作的处理方法。

  这里 How to Add Websockets to a Django App without Extra Dependencies(

  https://jaydenwindle.com/writing/django-websockets-zero-dependencies/) 就是一个很好的实例,但过于简单……

  思路

  实现

  上面的代码提供了思路,比较完整的可以参考这里 websockets-in-django-3-1 (

  https://aliashkevich.com/websockets-in-django-3-1/) 基本可以复用了。

  其中最核心的实现部分我放下面

  缝合怪

  做为合格的代码搬运工,为了提高搬运效率还是要造点轮子填点坑的,如何将上面的 WebSocket 类与 paramiko 结合起来,实现从前端接受字符传递给远程主机,并接受返回呢?

  前端

  xterm.js 完全满足,搜索下找个看着简单的就行。

Copyright@2015-2025 白癜风网版板所有