用scoket 写一个简版的ssh

服务端:

 #!usr/bin/env python
#-*-coding:utf-8-*-
# Author calmyan import socket,os s=socket.socket()#实例化一个 socket s.bind(('localhost',9100))#绑定一个监听端口 s.listen(5)#监听列表 5 个
print('监听中...')
while True:
conn,addr=s.accept()#监听到新的接连
print('连接到新的地址:',addr)
while True:
data=conn.recv(4092)#接收数据
if not data:#如果收的数据为空
print('客户端已经断开!')
break
print('指令:',data.decode())
cmd_res=os.popen(data.decode()).read()#读取数据,指令
#cmd_res_l=len(cmd_res.encode('utf-8'))#数据大小 if len(cmd_res)==0:
cmd_res='指令错误!'
continue
#conn.recv(1)
conn.send(str(len(cmd_res.encode('utf-8'))).encode('utf-8') )#发送数据的大小
#print(len(cmd_res))
clinet_ack=conn.recv(1024)#为了去粘包 conn.send(cmd_res.encode('utf-8'))#发送指令
#print(cmd_res.encode('utf-8'))
print('发送完毕!')
else:
s.close()

客户端:

 #!usr/bin/env python
#-*-coding:utf-8-*-
# Author calmyan
import socket
c=socket.socket()#实例化一个socket c.connect(('localhost',9100))#客户端连联
while True:
cho=input('指令:').strip()
if len(cho)==0:continue
c.send(cho.encode('utf-8'))#发送数据
cmd_res_size=c.recv(1024)#接收数据 数据大小
print('数据大小:',cmd_res_size)
size_l=0#收数据当前大小
c.send('确认!'.encode('utf-8'))#为了去粘包
while size_l< int(cmd_res_size.decode()):
data=c.recv(1024)#开始接收数据
size_l+=len(data)#加上
print(data.decode())
print(size_l)
else:
print('接收完毕',size_l)

在win10下,recv(1024)的时候ipconfig指令 会出错,其它的命令暂时没发现

python第四十二天 socket ---ssh的更多相关文章

  1. 孤荷凌寒自学python第四十二天python线程控制之Condition对象

     孤荷凌寒自学python第四十二天python的线程同步之Condition对象 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天学习了Condition对象,发现它综合了Event对象 ...

  2. Python(七)Socket编程、IO多路复用、SocketServer

    本章内容: Socket IO多路复用(select) SocketServer 模块(ThreadingTCPServer源码剖析) Socket socket通常也称作"套接字" ...

  3. Python全栈【Socket网络编程】

    Python全栈[socket网络编程] 本章内容: Socket 基于TCP的套接字 基于UDP的套接字 TCP粘包 SocketServer 模块(ThreadingTCPServer源码剖析) ...

  4. Python学习之路--Socket

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

  5. Python之路: socket篇

    (默认)与特定的地址家族相关的协议,如果是  ,则系统就会根据地址格式和套接类别,自动选择一个合适的协议 sk import socketip_port = ()sk = socket.socket( ...

  6. Python第四天 流程控制 if else条件判断 for循环 while循环

    Python第四天   流程控制   if else条件判断   for循环 while循环 目录 Pycharm使用技巧(转载) Python第一天  安装  shell  文件 Python第二天 ...

  7. python学习笔记之socket(第七天)

         参考文档:              1.金角大王博客:http://www.cnblogs.com/alex3714/articles/5227251.html               ...

  8. Python网络编程之Socket的简单实现

    一.引入 关于Python的网络编程,最基础莫过于socket了. socket,又称“套接字”,网络上的两个程序如果想要实现双向的数据通信,需要建立连接,这个连接的一端就称为一个socket. py ...

  9. Python学习:20.Python网络编程(Socket)

    一.Socket介绍 我们知道两个进程如果需要进行通讯,最基本的一个前提是能够唯一标示一个进程.在本地进程通讯中可以使用PID来唯一标示一个进程,但PID只在本地唯一,网络中的两个进程PID冲突几率很 ...

随机推荐

  1. APUE习题3.2用dup实现dup2以及shell中重定向符号的使用

    习题3.2的要求是不使用fcntl()而编写一个同dup2()功能相同的函数.直觉上是不断使用dup()直到返回指定的文件描述符. #include <stdio.h>#include & ...

  2. Kafka的通讯协议

    Kafka的通讯协议 标签:kafka Kafka的Producer.Broker和Consumer之间采用的是一套自行设计的基于TCP层的协议.Kafka的这套协议完全是为了Kafka自身的业务需求 ...

  3. Java设计模式学习记录-外观模式

    前言 这次要介绍的是外观模式(也称为门面模式),外观模式也属于结构型模式,其实外观模式还是非常好理解的,简单的来讲就是将多个复杂的业务封装成一个方法,在调用此方法时可以不必关系具体执行了哪些业务,而只 ...

  4. The Mac App Store isn't working. How to fix?

    Q. The Mac App Store isn't working. How to fix? First you must have built-in Ethernet at 'en0'. So, ...

  5. vue 使用mint-ui实现上拉加载和下拉刷新

    解决了官网中下拉刷新存在的问题 <template> <div class="tmpl"> <nav-bar title="商品列表&quo ...

  6. canvas-0scale.html

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. vue点击元素变色兄弟元素不变色

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. linux基础学习之软件安装以及常用命令

    linux基础学习之软件安装以及常用命令 调用中央仓库: yum install wget 然后下载nodejs: wget https://nodejs.org/dist/v10.14.2/node ...

  9. 微信 H5 支付流程以及一些坑

    原文:https://blog.niceue.com/front-end-development/wechat-h5-payment-process-as-well-as-some-pits.html ...

  10. React-classnames库

    今天在项目中看到了大佬引入了classnames,之前没用过所以去搜了搜,感觉还真的是挺好用的,搜到一篇很不错的文章,跟原创作者交流了一下就转载过来了! 下面废话不多说,我们直接来看文章吧 首先我们我 ...