用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冲突几率很 ...
随机推荐
-
SpringBoot整合MyBatis
转载请在文章最上方加上此句话:原文地址:http://www.cnblogs.com/zhuxiaojie/p/5836159.html 前言:这段时间用springboot感觉确实挺好用的,很大程度 ...
-
【BZOJ 3527】【ZJOI 2014】力
代换一下变成多项式卷积,这里是的答案是两个卷积相减,FFT求一下两个卷积就可以啦 详细的题解:http://www.cnblogs.com/iwtwiioi/p/4126284.html #inclu ...
-
Alice and Bob(不断补充)
我之前做过一些博弈的题目,以为博弈都是DP,结果被坑了很多次,其实博弈有很多种,在此,把我见过的类型都搬上来. 1,HDU3951(找规律) 题意:把n枚硬币围成一个圆,让Alice和Bob两个人分别 ...
-
maven ClassNotFoundException: org.springframework.web.context.ContextLoader
信息: Starting Servlet Engine: Apache Tomcat/6.0.32 2012-3-31 9:39:40 org.apache.catalina.core.Standar ...
-
自定义html标签
自定义html标签 (觉得页面全是div 的解决办法 来个个性化) 办法一(来源于 让ie支持html5标签的方法): 在ie9以前如果要自定义要使用document.createElement的方法 ...
-
osx安装sass
1.安装ruby (1)OS X 缺少的套件管理工具 homebrew 的安装 http://brew.sh/index_zh-tw.html (2)通过homebrew安装ruby // 到文件夹 ...
-
Android 之 GridView具体解释
工作这么久以来,都是以解决需求为目标.渐渐发现这样的学习方式不好,学到的知识能立即解决这个问题,但没有经过梳理归纳. 故想系统总结下一些有趣味的知识点. 在这篇博客中想以一个样例系统解说下GridVi ...
-
[LeetCode 题解]:Candy
There are N children standing in a line. Each child is assigned a rating value. You are giving candi ...
-
iOS中的*桥接
[摘抄自<iOS 6编程实战>] 与Objective-C库不同,我们在Objective-C中使用标准C语言和Core Foundation类库(CF*方法)不会遵循那些命名约定.这意味 ...
-
《梦断代码Dreaming In Code》阅读计划
书籍是人类宝贵的精神财富,读书是人们重要的学习方式,是人生奋斗的航灯,是文化传承的通道,是人类进步的阶梯.学生作为学习人群的主体,必须把读书作为头等大事.学校就是一个学生在教师指导下自主读书的空间,而 ...