服务器端:

# -*-coding:utf-8-*-
# Author:sunhao import socket
import os server = socket.socket() ip_port = ('127.0.0.1',6969) server.bind(ip_port) server.listen() while True: conn,f = server.accept()
print("new connect:",f) while True:
print("等待新指令") data = conn.recv(1024)
if not data:
print("客户端断开") break
print("执行指令",data) res = os.popen(data.decode()).read() print("before send",len(res.encode())) if len(res) == 0:
res = "cmd has bo output" conn.send(str(len(res.encode())).encode('utf-8')) #先发数据大小给客户端 会发生粘包 client_ack=conn.recv(1024) #解决粘包 conn.send(res.encode("utf-8")) print("send done") server.close()

  

 客户端:

# -*-coding:utf-8-*-
# Author:sunhao import socket client = socket.socket()
ip_port = ('127.0.0.1',6969) client.connect(ip_port) print("连接开始")
while True: command = input(">>>:").strip() if len(command) == 0:
continue client.send(command.encode("utf-8")) cmd_res_size=client.recv(1024) #接受命令结果的长度 print("命令结果的大小",cmd_res_size) client.send("准备好接收了".encode('utf-8')) #解决粘包 recived_size=0
recived_data=b'' while recived_size < int(cmd_res_size.decode()): print("----------",cmd_res_size.decode())
print("##############", type(cmd_res_size.decode())) data=client.recv(1024) print("&&&&&&&&&&",len(data)) recived_size += len(data) #每次收到的有可能小于1024 所以用len判断
recived_data += data else: print("cmd recive done",recived_size) print(recived_data.decode()) 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. Oracle表空间碎片整理SHRINK与MOVE

    整理表碎片通常的方法是move表,当然move是不能在线进行的,而且move后相应的索引也会失效,oracle针对上述不足,在10g时加入了shrink,那这个方法能不能在生产中使用呢?        ...

  2. Android-Gradle(一)

    理解基本的Gradle 如果你想创建一个Android project基于gradle,那么你必须写一个构建脚本,这个文件通常称之为build.grade,你可能已经觉察到了,当我们查看这一脚本,gr ...

  3. VXLAN

    网络协议栈 应用层:Telnet FTP HTTP SMTP... 传输层:TCP UDP 网络层:IP ICMP 物理链路层:ARP 以太网头(源目的MAC) | IP头(源目的IP) | TCP头 ...

  4. 创建servlet程序知识点详解---servlet-day05

    jdbc.properties怎么写? 把秘密改为自己电脑设置的 password url 3306 是安装mysql时所确定的端口  后面还可以接字符集的限定 #1 jsp是什么?(java ser ...

  5. VMware vSphere 5.x 与 vSphere 6.0各版本功能特性对比

    各版本中的新特性及功能对比:   VMware vSphere 5.0 VMware vSphere 5.1 VMware vSphere 5.5 VMware vSphere 6.0 ESXi 5. ...

  6. 隐藏非选中的checkBox

    //隐藏非选中的checkBox function onlyCheckBox(){ $("#dtlTable tr:gt(0)").each(function(i) { var c ...

  7. Eclipse新建Java工程出现红色感叹号怎么解决?

    安装了新版本的JDK之后,在Eclipse中新建Java工程出现红色感叹号怎么解决? 其实只要在Eclipse中重新设置一下JDK路径就行了 路径:右键Java工程>>Build Path ...

  8. Python socket粘包解决

    socket粘包: socket 交互send时,连续处理多个send时会出现粘包,soket会把两条send作为一条send强制发送,会粘在一起. send发送会根据recv定义的数值发送一个固定的 ...

  9. Linux 基础内容

    1.linux版本有:redhat(收费),centos,ubuntu,suse(开发使用) 2./目录下的:etc配置文件目录,media挂载点,opt第三方安装目录,boot启动文件,home家, ...

  10. libcurl返回常见错误码

    转载:https://blog.csdn.net/kenkao/article/details/46875571 转载:http://www.cnblogs.com/wainiwann/p/34929 ...