服务器端:

  1. # -*-coding:utf-8-*-
  2. # Author:sunhao
  3.  
  4. import socket
  5. import os
  6.  
  7. server = socket.socket()
  8.  
  9. ip_port = ('127.0.0.1',6969)
  10.  
  11. server.bind(ip_port)
  12.  
  13. server.listen()
  14.  
  15. while True:
  16.  
  17. conn,f = server.accept()
  18. print("new connect:",f)
  19.  
  20. while True:
  21. print("等待新指令")
  22.  
  23. data = conn.recv(1024)
  24. if not data:
  25. print("客户端断开")
  26.  
  27. break
  28. print("执行指令",data)
  29.  
  30. res = os.popen(data.decode()).read()
  31.  
  32. print("before send",len(res.encode()))
  33.  
  34. if len(res) == 0:
  35. res = "cmd has bo output"
  36.  
  37. conn.send(str(len(res.encode())).encode('utf-8')) #先发数据大小给客户端 会发生粘包
  38.  
  39. client_ack=conn.recv(1024) #解决粘包
  40.  
  41. conn.send(res.encode("utf-8"))
  42.  
  43. print("send done")
  44.  
  45. server.close()

  

 客户端:

  1. # -*-coding:utf-8-*-
  2. # Author:sunhao
  3.  
  4. import socket
  5.  
  6. client = socket.socket()
  7. ip_port = ('127.0.0.1',6969)
  8.  
  9. client.connect(ip_port)
  10.  
  11. print("连接开始")
  12. while True:
  13.  
  14. command = input(">>>:").strip()
  15.  
  16. if len(command) == 0:
  17. continue
  18.  
  19. client.send(command.encode("utf-8"))
  20.  
  21. cmd_res_size=client.recv(1024) #接受命令结果的长度
  22.  
  23. print("命令结果的大小",cmd_res_size)
  24.  
  25. client.send("准备好接收了".encode('utf-8')) #解决粘包
  26.  
  27. recived_size=0
  28. recived_data=b''
  29.  
  30. while recived_size < int(cmd_res_size.decode()):
  31.  
  32. print("----------",cmd_res_size.decode())
  33. print("##############", type(cmd_res_size.decode()))
  34.  
  35. data=client.recv(1024)
  36.  
  37. print("&&&&&&&&&&",len(data))
  38.  
  39. recived_size += len(data) #每次收到的有可能小于1024 所以用len判断
  40. recived_data += data
  41.  
  42. else:
  43.  
  44. print("cmd recive done",recived_size)
  45.  
  46. print(recived_data.decode())
  47.  
  48. client.close()

socket练习--ssh的更多相关文章

  1. Socket模拟SSH

    Socket模拟SSH 主要思路 客户端发送相关命令到服务端,服务端执行命令(通过subprocess模块实现)然后将结果返回给客户端 小知识 Linux中可以发送空数据,服务端能接受到空数据 win ...

  2. python之socket-ssh实例

    本文转载自大王http://www.cnblogs.com/alex3714/articles/5830365.html 加有自己的注释,应该会比原文更突出重点些 一. 基本Socket实例 前面讲了 ...

  3. Python 简单socket模拟ssh

    OSI七层模型(Open System Interconnection,开放式系统互联) 应用层 表示层 回话层 传输层 tcp,udp 网络层 ip,icmp 数据链路层 mac地址 物理层 物理网 ...

  4. [Python 网络编程] TCP、简单socket模拟ssh (一)

    OSI七层模型(Open System Interconnection,开放式系统互联) 应用层 网络进程访问应用层: 为应用程序进程(例如:电子邮件.文件传输和终端仿真)提供网络服务: 提供用户身份 ...

  5. [Python Study Notes]Socket模拟ssh执行cmd并记录遇到的问题

    服务器端: 流程: 1.创建servert实例 2.绑定地址和端口 3.开始监听 4.创建客户端连接实例 5.等待客户端的消息 6.......... # The_author = 'liu66' # ...

  6. python 通过socket实现ssh功能

    功能:实现从客户端向服务端发送cmd指令,服务端将结果返回给客户端的功能. #coding:utf-8 '''服务端''' import socket,os server=socket.socket( ...

  7. 进击的Python【第八章】:动态导入模块、断言、socket开发之SSH,FTP

    一.动态导入模块 知道一个模块名的字符串形式,通过字符串来导入模块 mod = __import__("lib.aa") print(mod) instance = getattr ...

  8. 循序渐进Python3(八) -- 0 -- 初识socket

    socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket起源于Un ...

  9. 通过 SSH 隧道方式图形化连接 AIX 服务器

    跳转到主要内容 登录 (或注册) 中文 [userid] IBM ID: 密码: 保持登录. 单击提交则表示您同意developerWorks 的条款和条件. 查看条款和条件. 需要一个 IBM ID ...

随机推荐

  1. 既然选择了远方,便只顾风雨兼程--myvue

    浅谈以下vue的模式,其实vue的模式跟react是一样的,都是MVVM模式,就是直接数据和视图之间的切换 如果单纯这样认识的话,和angular相比较起来,vue就简单的很多,但是事实情况并不是这样 ...

  2. 7.mongo python 库 pymongo的安装

    1.Python 中如果想要和 MongoDB 进行交互就需要借助于 PyMongo 库,在CMD中使用命令即可[注意此处是pip3,pip无法安装]: pip3 install pymongo 2. ...

  3. SQL Server通过BCP进行大批量数据导入导出

    预置条件: 使用sa帐号登录SQL Server Management Studio,右键点击安全性-登录名-数据库用户名属性,设置服务器角色为sysadmin. 删除已存在的存储过程 String ...

  4. [转载]Oracle Golden Gate - 概念和机制 (ogg)

    出处:https://www.cnblogs.com/qiumingcheng/p/5435907.html Golden Gate(简称OGG)提供异构环境下交易数据的实时捕捉.变换.投递. OGG ...

  5. Python数据分析Numpy库方法简介(二)

    数据分析图片保存:vg 1.保存图片:plt.savefig(path) 2.图片格式:jpg,png,svg(建议使用,不失真) 3.数据存储格式: excle,csv csv介绍 csv就是用逗号 ...

  6. 【BCFTOOLS】按样本拆分VCF文件

    在对vcf的操作有这样三个软件: Vcftools:主要用于群体分析,文本处理的功能不是很强大,虽然这个软件也可以拆分样本,但是这种拆分不涉及文件的处理,只是保留在分析流程里. GATK .x:这个软 ...

  7. Linux 文件时间记录属性 调优

    Linux 文件时间属性介绍 atime:(access time)显示的是文件中的数据最后被访问的时间,比如系统的进程直接使用或通过一些命令和脚本间接使用.(执行一些可执行文件或脚本) mtime: ...

  8. ORA-600 [kcblin_3] 解决方法

    今日,我们一个sql在某环境执行出错,如下: ORA-00600: 内部错误代码, 参数: [kcblin_3], [103], [253952], [8192], [32769], [312], [ ...

  9. GDB in Action

    GDB in Action 入门 编译 gcc -g -O0 -o word2vec.c word2vec -g 选项:要求 gcc 编译器保留调试符号信息. -O0 选项表示不优化,从 O1 ~ O ...

  10. bind封装

    原理:通过apply或者call方法来实现. (1)初始版本 Function.prototype.bind=function(obj,arg){ var arg=Array.prototype.sl ...