socket模拟ssh客户端和服务器

ssh服务端:

 

#ssh服务器

import os
import math
import socket
#创建套接字
server = socket.socket()
server.bind(("localhost", 6868))
server.listen()

while True:
    conn, addr = server.accept()
    while True:
        #接收操作指令
        recv_data = conn.recv(1024).decode("utf-8", "ignore")
        if not recv_data:break
        print("执行指令", recv_data)
        #获取用户输入指令的结果,是字符串形式
        send_data = os.popen(recv_data).read()
        #获取要发送数据的大小
        data_size = len(send_data)
        #向客户端发送数据大小
        conn.send(str(data_size).encode())
        #接收数据大小确认
        recv_data = conn.recv(1024).decode("UTF-8", "ignore")
        #打印客户端要接收的数据大小
        print(recv_data)
        if recv_data == "接收数据大小为0":
            send_data = "无数据输出"
        conn.send(send_data.encode())
server.close()

 

  

 

  

ssh客户端:

 

#ssh客户端

import socket
import math

client = socket.socket()
client.connect(("localhost", 6868))

while True:
    send_data = input(">>:").strip()
    if not send_data:
        continue
    client.send(send_data.encode())
    res_size = client.recv(1024).decode("utf-8", "ignore")
    client.send("接收数据大小为{0}".format(res_size).encode())
    recv_size = 0
    res_data = ""
    print(res_size)
    while recv_size < int(res_size):
        recv_data = client.recv(1024).decode("utf-8", "ignore")
        res_data += recv_data
        recv_size += len(recv_data)
    else:
        print(res_data)
client.close()

 

  

 

  

posted @ 2018-05-07 14:46  与君同悦  阅读(235)  评论(0)    收藏  举报