精华内容
下载资源
问答
  • bumblebee(大WaSP)运维工具:基于Elves开源自动化运维开发平台进行开发,实现的一款远程命令行执行工具(Elves开源自动化运维开发平台地址:),bumblebee分为manager、client、script三部分。 manager Java编写,纯...
  • 浏览器是无法和远程机器进行通信的,我们就得借助后来帮助实现这样的一个功能需求,具体的实现逻辑是: 用户————>控制浏览器命令行界面————>发送命令到后端服务器————>后端服务器连接socket...
        

     

    前言

    叮当 wap.guxs.net

    这几天研究了一下如何在web页面上通过telnet 连接一个远程的机器,通过命令行进行控制,让然,B/S架构的项目,如果直接通过

    浏览器是无法和远程机器进行通信的,我们就得借助后端来帮助实现这样的一个功能需求,具体的实现逻辑是:

    用户————>控制浏览器命令行界面————>发送命令到后端服务器————>后端服务器连接socket————>推送用户的命令

    telnet Server ————>后端服务器输入流接受返回字符——————>websocket 推送到前端完成交互

     

    telnet 

    可能很多人都知道ssh,估计很少会了解到关于telnet的东西,但是又结合起来说,其实两个都是一种协议,可以远程操控,

    但是telnet 在传输过程中存在着不安全的因素,因为传输都未经过加密,而都是明文,这就在远程连接中,很容易就会被抓包,出现问题,

    但SSH 就好比是加强版的telnet ,在传输过程中的数据进行加密,进而减少了被盗取的风险。并且所有的SSH都是经过压缩的,在网络上的

    传输速率也很优秀,这样多方面优秀的情况下,自然而然的就会代替掉telnet 

     

    并不是这样说telnet 就没什么用了,也不是这样子的,我们通过搭建这样一个demo 学习的是这样的搭建过程中去了解建立连接的过程以及交互的过程

    同样的,就算改编成SSH 其实也是这样的一个过程,学习就是一个不断探索的过程

     

     

    开始

    后端的话,从Springboot 入手,快速的搭建一个web工程,我们主要用这个web工程来接受前端发送过来的命令请求。

    包括:连接、断开、发送命令等等。

    最主要的,就是采用commons-net包下面的TelnetClient

            <dependency>
                <groupId>commons-net</groupId>
                <artifactId>commons-net</artifactId>
                <version>3.6</version>
            </dependency>

    就好比我们的交换机作为一个Telnet的服务端,而我们的本机就作为一个Telnet的客户端,客户端发起请求,服务端相应,与B/S其实一样的

    这里我就摘一些关键的部分来进行讲解,其他的请clone 项目进行查看

     

    创建一个telnet 客户端

    其实创建一个telnet 客户端是很简单的,就只需要new一个对象,而后填写ip地址和端口,端口默认是23,可以不写,就打开了一个telnet的Connection

            telnetClient = new TelnetClient();
            telnetClient.connect(ip,port);
    
            inputStream = telnetClient.getInputStream();
            outputStream = telnetClient.getOutputStream();

    从客户端得到两个流,一个输入流,一个输出流,这里就会涉及到JAVA关于IO相关的知识,当然网络上一般通行都是采用字节流

    inputStream 输入流 outputStread 输出流

    对于输入流和输出流相对于模糊的小伙伴,这里给大家加深一下理解,从字面意思上理解

    输入流:就是输进来的

    输出流:就是丢出去的

    其实这样理解的话,丢失了一个基于的对象。那就是,到底是基于客户端还是服务端呢,我这里简单的画个图

    就好比你的程序要读取一个文件,这个时候就需要用到输入流,输入流提供一个read的方法

    我得把日志信息写入到日志文件里,这个时候就需要用到输出流,输出流提供一个write() 方法

    输出流有一个flush() 强制刷新的方法 强制清空和写入

    一个好的习惯,流用完之后要进行关闭!!!!!

     

    在当前的环境里面,输入流就好比是客户端给我们返回的数据,而输出流才是我们推送命令的

     

    输入命令

    切记在命令后加入一个换行符,这就好比我们在telnet 客户端上面操作的时候,写完一句就需要敲一个回车,一样的道理。

    通过输出流的write 方法写入到输出流里面,flush将输出流清空和强制写入命令。

        public String sendCommand(String send) throws IOException {
    
            //加入换行符
             send = send + "\n";
    
            if (null == telnetClient) {
                return "连接已关闭";
            }
            outputStream.write(send.getBytes());
            outputStream.flush();
    
            return "发送成功";
        }

     

    读取服务端的返回

    上面已经反复叙述过了,服务端的返回我们需要采用输入流进行接收,同样的,需要从流里面读取出我们需要的字节,并将其转换为字符

    通过webSocket 推送到前台进行展示

    这时候就需要起一个线程来操作了,因为你不知道什么时候回接收到推送的消息,所以这个线程还不能停掉,得设置为后台线程,让它在开启连接后一直

    在后台保持活动状态,这里就需要了解一下:守护线程

     

    守护线程 、后台线程

    通过给一个线程设置setDaemon(true) 的形式标记这个线程为守护线程,也就是后台线程,线程启动前必须启动这个线程

    对于停止这个线程的方法嘛 那就是执行中断,在这个线程的逻辑代码中判断是否中断,中断则跳出这个线程,线程执行完毕

    这个线程也就停掉了呗!

     

     

     通过new 一个线程类,主要看一下这个类的实现方法

    outputThread = new InputPrintThread(inputStream);
    
            //守护线程
            outputThread.setDaemon(true);
            outputThread.start();

    通过一个while 循环的方式时刻执行是否中断的方法和 对输入流进行读取,因为读取在读取不到字节的时候会发生阻塞,所以这样是很有必要的

    因为在读取不到的时候,会阻塞这个线程,若读取流在文件末尾,则会返回-1 我们只需要判断不是-1继续读取就好了

     

    注意:这里说的是:读取出一些字节,并不是所有的字节,一次返回过来的字节它可能会读取多次,所以不能只循环一次就判断这个就完了

    @Override
        public void run() {
    
            int num = 0;
            //字节缓冲
            char[] bytes = new char[1024];
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
            try {
                //这里会发生阻塞,通过websocket推送进行
                while (!interrupted() && (num = inputStreamReader.read(bytes)) != -1) {
    
                    for (int i = 0; i < num; i++) {
                        char ab = bytes[i];
                        WebSocketServer.sendInfo(ab + "", SocketIdEnum.TELNET.getValue());
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

     

    webSocket 推送

    这一部分对于Springboot 来说整合WebSocket 简直是太简单了,一个POM依赖以及简单的几行配置即可开启

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-websocket</artifactId>
            </dependency>

    这里我就不细说了:我的内容也是参考这一篇文章:请参阅

    https://blog.csdn.net/moshowgame/article/details/80275084

     

    telnet 客户端的配置

    在windows 里面开启telnet 基本步骤:搜索windows功能

     

     

    找到并开始这一项即可,即可在命令行里面通过telnet + ip 进行远程访问,

     

    telnet 测试服务端

    很多小伙伴在昨晚后,不知如何去测试telnet的连通性以及代码的测试,缺少一个测试的环境

    手头又没有其他闲置的电脑或者是交换机,可以参考手头建立一个虚拟机的方式,这样也行,或者就

    采用华为的ENSP 创建一个虚拟的交换机后,通过自己电脑的虚拟网卡接入到虚拟交换机,这样其实也是可以通过telnet

    进行访问的,ENSP的安装这里略过,这里给一个链接:https://share.weiyun.com/5kmSEYr

     

    而后新建一个交换机通过虚拟网卡的映射进行连接后,通过本机PING 这台交换机的IP 若ping通则证明连接正常

     

     

    若不清楚配置交换机的telnet 可以参阅:https://www.cnblogs.com/pipci/p/8075686.html

    划分vlan 这些基础我就不细说了,自行参考

     

    测试效果

    对与一个写后台的人来说:前台这样子其实已经很不错了 

    哈哈 只能简单的写个窗口,然后将后台推送的内容push到页面上 

    因为是一个小的测试demo 有兴趣的可以进行改造升级更好的CSS美化

    小结

    关于研究这个web版本的telnet 其实还是涉及到很多东西,比如又再一次的学习到了流的概念以及

    之前从未知道这个输入流还会存在阻塞的问题 以及如何优雅的关闭流以及flush 强制刷新写入等诸多的问题

    虽然SSH已经是远程当中的主流,telnet 也未必没得用,总结一下总是好的。

     

    参考

    交换机telnet配置 https://www.cnblogs.com/pipci/p/8075686.html

    springboot 配置websocket https://www.cnblogs.com/pipci/p/8075686.html

     

    代码开源

    https://gitee.com/mrc1999/web-telnet

    展开全文
  • 之前做过一个基于Excel的进行SVN管理的工具,可以基于Excel进行详细信息的记录,方便的实现仓库,组,用户等的创建,删除以及权限管理,但是,仍然存在一些缺点:只能基于Windows系统,必须登录远程服务器,难以...
  • 现在,使用 Symantec pcAnywhere,即可实现对 Linux 和 Windows 系统的远程管理,从而避免使用命令行 Linux 工具。通过所选系统上运行的支持 Java 的 Web 浏览器,也可以同时管理这两种操作系统。增强的视频性能包括...
  • JS-Git是一款使用纯JavaScript实现Git客户端和服务器的开源项目。...该CLI工具能更换Git命令行工具的一个子集。这对基于Node.js的平台非常实用,但它不易安装Git。 介绍内容来自 iteye 标签:JSGit
  • 1.4.4 命令行工具19 1.4.5 较老的工具20 1.5 小结20 1.6 参考与延伸阅读20 第2章 剖析23 2.1 基础架构剖析23 2.1.1 足迹法和扫描:定义范围23 2.1.2 基本的标志获取24 2.1.3 高级http指纹识别25 2.1.4 基础架构中介...
  • 1.4.4 命令行工具19 1.4.5 较老的工具20 1.5 小结20 1.6 参考与延伸阅读20 第2章 剖析23 2.1 基础架构剖析23 2.1.1 足迹法和扫描:定义范围23 2.1.2 基本的标志获取24 2.1.3 高级http指纹识别25 2.1.4 ...
  • 实例004 使用命令行工具测试JDK 实例005 在命令行编译Java源码 1.2 Tomcat服务器 实例006 下载Tomcat服务器 实例007 安装Tomcat服务器 实例008 启动Tomcat并测试 实例009 通过Eclipse部署与发布Web应用 实例...
  • 实例004 使用命令行工具测试JDK 实例005 在命令行编译Java源码 1.2 Tomcat服务器 实例006 下载Tomcat服务器 实例007 安装Tomcat服务器 实例008 启动Tomcat并测试 实例009 通过Eclipse部署与发布Web应用 实例...
  • shiv:一个命令行工具,可用于构建完全独立的 zip 应用(PEP 441 所描述的那种),同时包含了所有的依赖项。 构建工具 将源码编译成软件。 buildout:一个构建系统,从多个组件来创建,组装和部署应用。 ...
  • = 1.2.47 远程命令执行漏洞利用工具及方法 SpringBoot_Actuator_RCE jizhicms(极致CMS)v1.7.1代码审计-任意文件上传getshell+sql注入+反射XSS CVE-2020-9484:Apache Tomcat Session 反序列化代码执行漏洞|CVE-2020...
  • java开源包1

    千次下载 热门讨论 2013-06-28 09:14:34
    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
  • java开源包12

    热门讨论 2013-06-28 10:14:45
    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
  • Java资源包01

    2016-08-31 09:16:25
    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
  • java开源包101

    2016-07-13 10:11:08
    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
  • java开源包11

    热门讨论 2013-06-28 10:10:38
    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
  • java开源包2

    热门讨论 2013-06-28 09:17:39
    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
  • java开源包3

    热门讨论 2013-06-28 09:20:52
    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
  • java开源包6

    热门讨论 2013-06-28 09:48:32
    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
  • java开源包5

    热门讨论 2013-06-28 09:38:46
    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
  • java开源包10

    热门讨论 2013-06-28 10:06:40
    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
  • java开源包4

    热门讨论 2013-06-28 09:26:54
    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
  • java开源包8

    热门讨论 2013-06-28 09:55:26
    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
  • java开源包9

    热门讨论 2013-06-28 09:58:55
    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
  • java开源包7

    热门讨论 2013-06-28 09:52:16
    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
    演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口函数得到远程...
  • 演示Address EJB的实现 ,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口函数得到远程...
  • 首先请确保你本地开发环境已安装了git管理工具,然后在需要存放本项目的目录打开git命令行工具Git Bash Here,在命令行中输入如下命令: git clone https://github.com/lampo1024/DncZeus.git 以上命令就把DncZeus的...

空空如也

空空如也

1 2 3 4
收藏数 78
精华内容 31
关键字:

web端实现远程命令行工具