zoukankan      html  css  js  c++  java
  • python之模仿ssh服务

    小白练习笔记

    import socket
    import os
    server = socket.socket()      #实例化
    server.bind(('localhost',9999))  #绑定ip及端口

    server.listen()          #监听

    while True:              #循环监听服务,接收用户来访
    conn,addr = server.accept()  #实例化来访用户
    print('new conn:',addr)

    while True:            #持续监听用户的来访指令
    print('等待新的指令')
    data = conn.recv(1024)    #接收缓冲区大小
    if not data:          #防止空信息
    print('客户端已断开')
    break
    print('执行指令:',data)    
    cmd_res = os.popen(data.decode()).read()    #存储指令返回结果
    print('before send', len(cmd_res.encode('utf-8')))    
    if len(cmd_res) == 0:              #防止无返回信息,客户端卡死
    cmd_res = 'cmd has no output....'
    conn.send(str(len(cmd_res.encode('utf-8'))).encode('utf-8'))    #通知客户端返回信息长度,注意编码,汉字占3字节,如果不编码将导致字节数不一致
         client_ack = conn.recv(1024)       #socket服务两次发送数据之间如果没有间隔,有可能在缓冲区合并为一条发送。这将导致客户端报错,在两次之间加一次接收确认,将socket粘包有效分割开
    conn.send(cmd_res.encode('utf-8'))      #发送信息,将信息转换成字节码
    print('send done')    
    server.close()
  • 相关阅读:
    Python操作RabbitMQ
    数组的排序算法
    元类
    Python 中的单例模式
    JS的Ajax和同源策略
    Ajax
    Linux目录结构以及文件操作
    Pymysql
    struts2拦截器和过滤器区别
    为Github 托管项目的访问添加SSH keys
  • 原文地址:https://www.cnblogs.com/kcrist/p/9647344.html
Copyright © 2011-2022 走看看