python第四十二天 socket ---ssh
用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的更多相关文章
- 孤荷凌寒自学python第四十二天python线程控制之Condition对象
孤荷凌寒自学python第四十二天python的线程同步之Condition对象 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天学习了Condition对象,发现它综合了Event对象 ...
- Python(七)Socket编程、IO多路复用、SocketServer
本章内容: Socket IO多路复用(select) SocketServer 模块(ThreadingTCPServer源码剖析) Socket socket通常也称作"套接字" ...
- Python全栈【Socket网络编程】
Python全栈[socket网络编程] 本章内容: Socket 基于TCP的套接字 基于UDP的套接字 TCP粘包 SocketServer 模块(ThreadingTCPServer源码剖析) ...
- Python学习之路--Socket
Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock ...
- Python之路: socket篇
(默认)与特定的地址家族相关的协议,如果是 ,则系统就会根据地址格式和套接类别,自动选择一个合适的协议 sk import socketip_port = ()sk = socket.socket( ...
- Python第四天 流程控制 if else条件判断 for循环 while循环
Python第四天 流程控制 if else条件判断 for循环 while循环 目录 Pycharm使用技巧(转载) Python第一天 安装 shell 文件 Python第二天 ...
- python学习笔记之socket(第七天)
参考文档: 1.金角大王博客:http://www.cnblogs.com/alex3714/articles/5227251.html ...
- Python网络编程之Socket的简单实现
一.引入 关于Python的网络编程,最基础莫过于socket了. socket,又称“套接字”,网络上的两个程序如果想要实现双向的数据通信,需要建立连接,这个连接的一端就称为一个socket. py ...
- Python学习:20.Python网络编程(Socket)
一.Socket介绍 我们知道两个进程如果需要进行通讯,最基本的一个前提是能够唯一标示一个进程.在本地进程通讯中可以使用PID来唯一标示一个进程,但PID只在本地唯一,网络中的两个进程PID冲突几率很 ...
随机推荐
- APUE习题3.2用dup实现dup2以及shell中重定向符号的使用
习题3.2的要求是不使用fcntl()而编写一个同dup2()功能相同的函数.直觉上是不断使用dup()直到返回指定的文件描述符. #include <stdio.h>#include & ...
- Kafka的通讯协议
Kafka的通讯协议 标签:kafka Kafka的Producer.Broker和Consumer之间采用的是一套自行设计的基于TCP层的协议.Kafka的这套协议完全是为了Kafka自身的业务需求 ...
- Java设计模式学习记录-外观模式
前言 这次要介绍的是外观模式(也称为门面模式),外观模式也属于结构型模式,其实外观模式还是非常好理解的,简单的来讲就是将多个复杂的业务封装成一个方法,在调用此方法时可以不必关系具体执行了哪些业务,而只 ...
- 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, ...
- vue 使用mint-ui实现上拉加载和下拉刷新
解决了官网中下拉刷新存在的问题 <template> <div class="tmpl"> <nav-bar title="商品列表&quo ...
- canvas-0scale.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- vue点击元素变色兄弟元素不变色
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- linux基础学习之软件安装以及常用命令
linux基础学习之软件安装以及常用命令 调用中央仓库: yum install wget 然后下载nodejs: wget https://nodejs.org/dist/v10.14.2/node ...
- 微信 H5 支付流程以及一些坑
原文:https://blog.niceue.com/front-end-development/wechat-h5-payment-process-as-well-as-some-pits.html ...
- React-classnames库
今天在项目中看到了大佬引入了classnames,之前没用过所以去搜了搜,感觉还真的是挺好用的,搜到一篇很不错的文章,跟原创作者交流了一下就转载过来了! 下面废话不多说,我们直接来看文章吧 首先我们我 ...