学习笔记-实现模拟ssh连接功能

实现模拟ssh连接功能

注意到MOBA软件的功能就是连接上虚拟机之后在软件里面记性linux各种操作,练习的时候使用虚拟机,实际上以后都是连接的远程服务器

软件里面输入命令,将命令传输给ssh对应的22号端口,端口接收后进行解析,执行命令,将执行完成的命令返回给 软件,整个流程就像是一个客户端向服务器发起请求,服务器接收请求后执行命令,并返回执行结果,客户端接收到服务器返回的结果后进行打印

那么必须知道服务器的ip,如果服务器没有ssh服务也就不会开放22号端口,所以也会连接不上.如果服务器设置了防火墙,也可能连接不上,因此还是在自己的虚拟机上模拟

模拟出对应的客户端

from socket import *

def main():
    # 创建对象
    client = socket(AF_INET, SOCK_STREAM)
    client.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) # 端口释放
    # 创建连接
    client.connect(('172.16.17.16', 8082))
    # 发送信息
    while True:
        data = input('>>') # 在这里就可以输入命令
        if data == 'quit':
            # 关闭连接
            client.close()
            break
        client.send(data.encode('utf-8'))
        # 接收服务器返回的信息
        rs_data = client.recv(1024)
        print(rs_data.decode('utf-8'))


if __name__ == '__main__':
    main()

在调试阶段经常会出错,有的时候会占着端口,下次连接就端口失效,所以会配置一个端口释放,只要一断开,断开自动释放,客户端如果输入的不是正确的命令则没有返回值,如果输入的类似cd这种命令也没有返回值

下面是服务端

import os
from socket import *

def main():
    # 创建服务器对象
    server = socket(AF_INET, SOCK_STREAM)
    # 端口立即释放问题
    server.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
    # 将服务器挂起
    address = ('172.16.17.16', 8082)
    server.bind(address)
    # 设置成为等待模式
    server.listen()
    # 如果有接通进来的进行创建连接
    while True:
        new_server, client_link = server.accept()
        while True: # 永远处于接听状态
            try:
                # 拿出对应的数据
                data = new_server.recv(1024)
            except: # 这里不捕获的话当客户端非正常关闭时会有异常
                data = False
            # 将数据返回给发起方
            if data:
                # 接收到之后执行代码
                cmd = os.popen(data.decode('utf-8')).readlines()
                print(f"接收到信息:{data}")
                new_server.send(str(cmd).encode('utf-8'))
                print('返回信息')
            else:
                # 关闭连接
                new_server.close()
                print('连接已经关闭')
                break


if __name__ == '__main__':
    main()

服务端麻烦一些,os库里面的popen方法能够执行参数对应的命令,使用readlines方法把执行完成的结果收集到,再发送给对应的客户端

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值