zoukankan      html  css  js  c++  java
  • 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() #关闭客户端
    
  • 相关阅读:
    [LeetCode] 17. Letter Combinations of a Phone Number 电话号码的字母组合
    [LeetCode] 11. Container With Most Water 装最多水的容器
    [LeetCode] 42. Trapping Rain Water 收集雨水
    Meta标签中的format-detection属性及含义(转)
    html marquee 标签(转)
    css 样式引入的方法 link 与import的区别
    html meta标签使用
    backface-visibility
    zepto.js 总结
    HTTP 请求的组成 方法 已经 请求的状态码
  • 原文地址:https://www.cnblogs.com/iexperience/p/9236327.html
Copyright © 2011-2022 走看看