WebsocketWebSSH

article/2025/10/2 18:37:18

什么是WebSSH?

  • webssh 泛指一种技术可以在网页上实现一个 SSH 终端
  • ssh终端:用来通过ssh协议,连接服务器进行管理
  • 运维开发方向:堡垒机登录、线上机器管理(因为运维人员不可能24小时携带电脑)
  • 在线编程:提供一个编程环境

WebSSH是一个简单的Web SSH客户端,用作连接到SSH服务器的SSH客户端。它是用Python编写的,基于tornado,paramiko和xterm.js,特征如下:

  • 支持SSH密码验证,包括空密码。
  • 支持SSH公钥认证,包括DSA RSA ECDSA Ed25519密钥。
  • 支持加密密钥。
  • 支持双因素身份验证(基于时间的一次性密码)。
  • 支持全屏终端。
  • 终端窗口可调整大小。
  • 自动检测ssh服务器的默认编码。
  • 现代浏览器支持Chrome,Firefox,Safari,Edge,Opera。

WebSSH是如何工作的?

123 ±--------+ http ±-------+ ssh ±----------+|
browser | <====> | webssh | <=> | ssh server|±--------+
websocket ±-------+ ssh ±----------+

WebSSH安装
Python 2.7 / 3.4 +

  1. 安装此应用程序,运行命令 pip install webssh
  2. 启动Web服务器,运行命令 wssh
  3. 打开浏览器,导航到 127.0.0.1:8888
  4. 输入您的数据,提交表格。

websocket

什么是websocket

  • webSocket是一种在单个TCP连接上进行全双工通信的协议
  • 客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。
  • 浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输

远古时期解决方案就是轮训
客户端以设定的时间间隔周期性地向服务端发送请求,频繁地查询是否有新的数据改动(浪费流量和资源)

webSocket应用场景?
聊天软件:
最著名的就是微信,QQ,这一类社交聊天的app
弹幕:
各种直播的弹幕窗口
在线教育:
可以视频聊天、即时聊天以及其与别人合作一起在网上讨论问题…

websocket与http区别

  • http请求建立连接只能发送一次请求
  • websocket建立的长连接,一次连接,后续一直通信,这样节省资源

websocket原理

  • websocket首先借助http协议(通过在http头部设置属性,请求和服务器进行协议升级,升级协议为websocket的应用层协议)
  • 建立好和服务器之间的数据流,数据流之间底层还是依靠TCP协议;
  • websocket会接着使用这条建立好的数据流和服务器之间保持通信
  • 由于复杂的网络环境,数据流可能会断开,在实际使用过程中,我们在onFailure或者onClosing回调方法中,实现重连

webSocket使用说明

1. 如果你想为一个单独的视图处理一个websocklet连接可以使用accept_websocket装饰器,它会将标准的HTTP请求路由到视图中。

2. 使用require_websocke装饰器只允许使用WebSocket连接,会拒绝正常的HTTP请求。

3. 在设置中添加设置MIDDLEWARE_CLASSES=dwebsocket.middleware.WebSocketMiddleware这样会拒绝单独的视图实用websocket,必须加上accept_websocket 装饰器。

4. 设置WEBSOCKET_ACCEPT_ALL=True可以允许每一个单独的视图实用websockets

3.图解http与webSocket比较

  • 浏览器通过 JavaScript 向服务端发出建立 WebSocket 连接的请求
  • 在 WebSocket 连接建立成功后,客户端和服务端就可以通过 TCP连接传输数据。
  • 因为WebSocket 连接本质上是 TCP 连接,不需要每次传输都带上重复的头部数据
      在这里插入图片描述

Django的Websocket

1)dwebsocket介绍

1. dwebsocket 是一个在 django 用来实现 websocket 服务端的三方模块,使用上手非常简单

2. 安装方式如下:pip install dwebsocket

3. git 地址:https://github.com/duanhongyi/dwebsocket

2)dwebsocket方法

首先是两个基本的装饰器,用来限定过滤 websocket 的连接

dwebsocket.accept_websocket # 允许 http 与 websocket 连接
dwebsocket.require_websocke # 只允许 websocket 连接

1.request.is_websocket() :如果是个websocket请求返回True,如果是个普通的http请求返回False,可以用这个方法区分它们。
2.request.websocket() :websocket请求建立之后,有一个websocket属性,如果request.is_websocket()False,这个属性将是None3.WebSocket.wait() :返回一个客户端发送的信息,在客户端关闭连接之前他不会返回任何值,这种情况下,方法将返回None
4.WebSocket.read() :如果没有从客户端接收到新的消息,read方法会返回一个新的消息,如果没有,就不返回。这是一个替代wait的非阻塞方法
5.WebSocket.count_messages() :返回消息队列数量
6.WebSocket.has_messages() : 如果有新消息返回True,否则返回False
7.WebSocket.send(message) :向客户端发送消息
8.WebSocket.__iter__() :websocket迭代器

HTML的Websocket

1)响应事件

复制代码
# 1. 创建一个WebSocket连接
var ws = new WebSocket("ws://127.0.0.1:8001/echo")# 2. ws.onopen方法(当 ws 连接建立时触发)
ws.onopen = function () {console.log('WebSocket open');   //成功连接上Websocket
};# 3. 当 ws 连接接收到数据时触发
ws.onmessage = function (e) {console.log('message: ' + e.data);  //打印出服务端返回过来的数据
};# 4. 当 ws 连接发生通信错误时触发
ws.onerror = function () {console.log('连接出错');
};# 5. 当连接关闭时触发
ws.onclose = function(){console.log('连接关闭')
}

2)方法

ws.send(str) // 通过ws连接发送数据
ws.close() // 关闭ws连接

Websocket心跳包机制

心跳包的意义

1. 在使用websocket的过程中,有时候会遇到网络断开的情况,但是在网络断开的时候服务器端并没有触发onclose的事件。

2. 这样会有:服务器会继续向客户端发送多余的链接,并且这些数据还会丢失。

3. 所以就需要一种机制来检测客户端和服务端是否处于正常的链接状态。

4. 因此就有了websocket的心跳了,还有心跳,说明还活着,没有心跳说明已经挂掉了

websocket实现心跳检测的思路

  • 通过setInterval定时任务每个3秒钟调用一次reconnect函数
  • reconnect会通过socket.readyState来判断这个websocket连接是否正常
  • 如果不正常就会触发定时连接,每4s钟重试一次,直到连接成功
  • 如果是网络断开的情况下,在指定的时间内服务器端并没有返回心跳响应消息,因此服务器端断开了。
  • 服务断开我们使用ws.close关闭连接,在一段时间后,可以通过 onclose事件监听到。

原址参考于此


http://chatgpt.dhexx.cn/article/Ubpqcun5.shtml

相关文章

WebSSH神器sshwifty的安装与使用

本文章最初发表在XJHui’s Blog&#xff0c;未经允许&#xff0c;任何人禁止转载&#xff01; 为使您获得最好的阅读体验&#xff0c;强烈建议您点击 这里 前往 XJHui’s Blog 查看&#xff01; WebSSH工具 初衷 9.9买的一年服务器&#xff0c;不用实属可惜由于是计算机专业…

Sql Server查看表结构

1、表结构 2、通过 t abc 查询出的表结构 3、存储过程 t CREATE proc t TableName nvarchar(200) as SELECT (select top 1 isnull(value,) from sys.extended_properties ex_p where…

sql 查看表结构改动的记录

系统更新迭代比较大的情况&#xff0c;可能改动了比较多的数据库&#xff0c;留个笔记。。 select * from sys.objects order by modify_date desc 这句是查看数据库表的改动&#xff0c;希望对自己有帮助 -20180613

Access、SQLServer以及SQLite如何查询数据表结构

日期&#xff1a;2021年11月05日 作者&#xff1a;Commas 注释&#xff1a;整理了一下不同数据库如何获取数据表结构&#xff0c;比较有意思的玩法就是将不同数据库进行相互转换&#xff0c;由于篇幅问题&#xff0c;暂且仅讨论"数据表结构"的获取…… 目录 文章目录…

sqlServer 查看表结构(字段类型) (更新中)

对MySQL和Oracle熟悉的朋友知道用desc就可以查询一张表的结构&#xff0c;但是在SQL Server里执行desc命令会报错。 现提供两条命令查询表结构&#xff1a; 1.sp_help table_name; 2.sp_columns table_name; sp_help 直通车报表上周宝贝$; sp_columns 直通车报表…

用SQL语句查看Oracle数据表的结构信息

文章目录 获取所有表的列表查看表结构查看某表的注释查看某表的字段注释 获取所有表的列表 相知道相应用户下有哪些表&#xff0c;可以通过以下 SQL 语句进行查询 select table_name from user_tables; //当前用户的表 select table_name from all_tables; //所有用户…

使用SQL语句修改表结构(SQL Server)

使用SQL语句修改表结构&#xff08;SQL Server&#xff09; 文章目录 使用SQL语句修改表结构&#xff08;SQL Server&#xff09;ALTER TABLE的语法格式如下&#xff1a;添加列删除列修改表的列数据类型和名称 ALTER TABLE的语法格式如下&#xff1a; 上述格式主要参数说明如下…

sql查看mysql表结构_MySQL 查看表结构简单命令

一、简单描述表结构,字段类型 desc tabl_name; 显示表结构,字段类型,主键,是否为空等属性,但不显示外键。 例如:desc table_name 二、查询表中列的注释信息 select * from information_schema.columns where table_schema = db #表所在数据库 and table_name = tablename…

sqlserver数据库如何快速查看表结构sql

有时候&#xff0c;我们熟悉一个新系统&#xff0c;首先就需要熟悉其数据库的各个表结构。这时候&#xff0c;其实我们可以通过一个SQL清晰的查看表结构。 SQL如下&#xff1a; SELECT CASEWHENcol.colorder 1 THENobj.name ELSE END AS 表名,col.colorder AS 序号 ,col.na…

SQL语句查询表结构

代码如下&#xff1a; SELECT表名 Case When A.colorder1 Then D.name Else End,表说明 Case When A.colorder1 Then isnull(F.value,) Else End,字段序号 A.colorder,字段名 A.name,字段说明 isnull(G.[value],),标识 Case When COLUMNPROPE…

SQL语句获取表结构

目录 语句演示千人全栈VIP答疑群联系博主帮忙解决报错 语句 获取表的结构数据&#xff0c;如表名&#xff0c;数据类型&#xff0c;精度等数据&#xff0c;代码如下&#xff1a; SELECT t.table_name, -- 表名c.column_name, -- 字段名c.data_type, -- 字段类型c.numeric_pre…

matlab 频数分布直方图_matlab 统计直方图

展开全部 1、首先随机产生一组数据作为例子&#xff0c;在这里&#xff0c;我们32313133353236313431303231363533e4b893e5b19e31333431363566随机产生一组数据&#xff0c;并将其圆整为整数&#xff0c;方法是&#xff1a;around(10*rand(5,1)) 2、接下来&#xff0c;可以用MA…

关于MATLAB直方图的绘制及应用

关于MATLAB 直方图 整理记录histogram2 —三维直方图的一些用法及拓展应用 散点绘制直方图 h histogram2(Xe,Ye,10,FaceColor,flat),title(Entries),xlabel(Xe),ylabel(Ye),colorbar,grid onXe Ye&#xff0c;均为列向量&#xff1b;10 &#xff0c;bin number&#xff1b; …

Matlab画直方图

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 %% 绘制统计直方图 %hist(y)&#xff1a;如果y是向量&#xff0c;则把其中元素放入10个条目中&#xff0c;且返回每条中的元素的个数&#xff1b;如果y为矩阵&#xff0c;则分别对每列进行处理&#xff0c;显示多组条形。…

MATLAB柱状图(数据可视化)

示例 A[60.689;87.714;143.1;267.9515];C[127.5;160.4;231.9;400.2] BC-A; D[A,B,C]; bar1bar([2:5:17],A,BarWidth,0.2,FaceColor,k); hold on; bar2bar([3:5:18],B,BarWidth,0.2,FaceColor,[0.5 0.5 0.5]); hold on; bar3bar([4:5:19],C,BarWidth,0.2,FaceColor,w);ylabel(耗…

matlab 柱状图不同颜色(取巧哈)

以前写过一个颜色索引的柱状图&#xff0c;但是年代久远想不起来了。 今天需要出一个不同颜色的柱状图&#xff0c;看了一下博客&#xff0c;首先使用了matlab中的children&#xff0c;但是发现颜色没有变化。 后来从另外的博客中发现&#xff0c;matalb2014以后的版本这个功能…

Matlab柱状图 不同颜色

实现柱状图正负颜色不同&#xff0c;增加小刻度线 clear clcdata xlsread(ecof(zcm).xls);hold on for i 1 : length(data)if data(i,1)> 0bar(data(i,2),data(i,1),0.5,b) % 正数用蓝色elsebar(data(i,2),data(i,1),0.5,k) % 负数用黑色end end % set(gca,Fontname, Ti…

matlab直方图均衡化函数

文章目录 直方图均衡化函数&#xff08;彩色图&#xff09;测试代码运行结果灰度图像的直方图均衡化 直方图均衡化函数&#xff08;彩色图&#xff09; % 直方图均衡化函数function [ RGB ] histEquSelf(image)RGB image;subplot(121); imshow(RGB); title(彩色图);[R, C, K…

matlab柱状图的绘制及数值的标注

目标是绘制以下的柱状图&#xff1a; 代码&#xff1a; state_x[hunx;suix;kongx]; xx[6,8,10,12,14,16]; figure bar(xx,state_x); for i1:length(hunx)text(xx(i)-0.5,state_x(i,1),num2str(state_x(i,1)),HorizontalAlignment,center,VerticalAlignment,bottom);text(xx(i)…

matlab直方图概率密度图,histeq从用法到原理——Matlab直方图均衡化函数

作者辛苦原创,转载请注明出处。 一、用法 histeq是Matlab中的一个工具箱函数。其调用格式为: f1 = histeq(f,n) [f1,T] = histeq(f,n) 其中,f为输入图像,n为指定直方图均衡化后的灰度级数(若n为向量,且长度小于等于f的灰度级数,则此时为直方图规定化映射,映射灰度区间为…