python 通过socket实现ssh功能

功能:实现从客户端向服务端发送cmd指令,服务端将结果返回给客户端的功能。

#coding:utf-8
'''服务端'''
import socket,os
server=socket.socket()  #创建对象
server.bind(('localhost',2345)) #绑定监听端口(服务器端的IP地址和端口)
server.listen(5)  #开始监听TCP传入连接,5指定在拒绝连接之前,操作系统可以挂起的最大连接数量(tcp连接队列的大小,即连接数)
while True:
    print'传输数据过来吧。。。'
    conn,addr=server.accept() #与客户端建立连接
    while True:
        print '开始接受数据'
        data=conn.recv(1024)  #一次允许接受的数据大小
        print '数据是:%s'%data
        if len(data)==0:
            print '没有传数据'
            break
        data_po=os.popen(data).read() #将命令结果读到data_po中
        print '输出内容长度:',len(data_po)
        print data_po
        print type(data_po)
        if len(data_po)==0:
            data_po= '输入的命令有误!   '
        conn.send(str(len(data_po)))  #发送总数据的大小给客户端,send里面必须是str类型。
        conn.send(data_po)
        print isinstance(data_po, unicode)  #发送数据给客户端,客户端收到多少数据,取决于它设定可以接受数据的大小。
server.close()  #关闭服务端
#coding:utf-8
'''客户端'''
import socket
client=socket.socket()  
client.connect(('localhost',2345))  #连接端的IP地址和端口号(这里写的是服务端的IP地址和端口号)
a=0  #统计接受数据的总大小
while True:
    data_cl=raw_input('>>:').strip()  #输入
    if len(data_cl)==0:  #不能输入回车、空格字符
        print '输入错误,请重新输入'
        continue
    client.send(data_cl)  #发送输入的指令
    data_lp=client.recv(1024) #接受服务端数据的大小
    while a<=data_lp:  #如果接受数 据比总量小,将继续接受,直到接受数的大小大于总量大小
        data=client.recv(1024) #一次允许接受的数据大小,通过while循环可以多少实现接受信息量比较大的数据。
        a=a+len(data)
        print '输出数据长度:',a
        print data
    data_cl=raw_input('>>:').strip()  #输入
client.close() #关闭客户端

猜你喜欢

转载自www.cnblogs.com/iexperience/p/9236327.html
今日推荐