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冲突几率很 ...
随机推荐
- python之线程(threading)
线程是属于进程的,一个进程可能包含多个线程 至于线程和进程在使用时哪个更好,只能看使用的场景了 话不多说,看下线程模块(threading)的使用方法: #导入模块 import threading, ...
- 没有安装hiredis
在redis的发行包中的deps目录中就包含hiredis的源码,手动编译安装,或者自行下载一份.地址:hiredis的地址 cd /deps/hiredis make make install 然后 ...
- Can't sendRedirect() after data has committed to the client
resin下 response.sendRedirect("XXX"); 会报异常:java.lang.IllegalStateException: Can't sendRedir ...
- (转)linux中nmcli命令的使用及网络配置
原文:https://blog.51cto.com/groot/1847482 http://www.178linux.com/44076----CentOS7中nmcli网络管理及使用详解 http ...
- JAVA获取运行环境的信息
System.getProperties().list(System.out); 得到运行环境的信息
- Android生成二维码--拍照或从相册选取图片
拍照或从相册选择图片是我们日常开发中经常使用到的,可以说是必须掌握的东西.上一篇我介绍了如何生成自定义二维码<Android生成自定义二维码>,其中logo和代替黑色色块的图片都是写死的, ...
- Spring Boot + Spring Cloud 实现权限管理系统 后端篇(二十三):配置中心(Config、Bus)
在线演示 演示地址:http://139.196.87.48:9002/kitty 用户名:admin 密码:admin 技术背景 如今微服务架构盛行,在分布式系统中,项目日益庞大,子项目日益增多,每 ...
- Java并发编程笔记之ConcurrentHashMap原理探究
在多线程环境下,使用HashMap进行put操作时存在丢失数据的情况,为了避免这种bug的隐患,强烈建议使用ConcurrentHashMap代替HashMap. HashTable是一个线程安全的类 ...
- 初识Quartz (一)
首先大概的了解一下Quartz. 一:首先进入官网去看看什么是quartz.http://www.quartz-scheduler.org/ Quartz是一个功能丰富的开源作业调度库,可以集成到几乎 ...
- [EOJ439] 强制在线
Description 见EOJ439 Solution 先考虑不强制在线怎么做. 按询问区间右端点排序,从左往右扫,维护所有后缀的答案. 如果扫到 \(a[i]\),那么让统计个数的 \(cnt[a ...