用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. JavaScript防篡改对象

    不可扩展对象 默认情况下,所有对象都是可扩展的,使用Object.preventExtensions()方法可以改变这一行为. var person = { name: "Hiram&quo ...

  2. [EXP]McAfee ePO 5.9.1 - Registered Executable Local Access Bypass

    # Exploit Title: McAfee ePO 5.9.1 Registered Executable Local Access Bypass # Date: 2019-03-07 # Exp ...

  3. 对话Task

    上一篇简单讲解了 线程和线程池以及上下文切换.创建线程代价高昂,默认每个线程都要占用大量虚拟内存1M.更有效的做法使用线程池,重复利用线程.在.NET4.0中引入了TPL任务并行库,你可以在将精力集中 ...

  4. Cordova安装、设置代理和引入插件

    cardova代理 $ npm config --global set registry http://registry.cnpmjs.org cardova添加插件 格式:cordova plugi ...

  5. Linux 学习手记(2):Linux文件系统的基本结构

    Linux 文件系统概况 Linux文件系统为一个倒置的树状结构,所有文件或文件夹均包含在一个根目录“/”中.如图所示(每个目录的作用可以参考:Linux目录结构说明): Linux系统严格区分大小写 ...

  6. How to translate virtual to physical addresses through /proc/pid/pagemap

    墙外通道:http://fivelinesofcode.blogspot.com/2014/03/how-to-translate-virtual-to-physical.html I current ...

  7. phpstorm配置Xdebug进行调试

    运行环境: PHPSTORM版本 : 8.0.1 PHP版本 : 5.6.2 xdebug版本:php_xdebug-2.2.5-5.6-vc11-x86_64.dll ps : php版本和xdeb ...

  8. Jquery的ID选择器

    <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></scri ...

  9. HTTP 错误 500 调用loadlibraryex失败

    HTTP 错误 500.0 - Internal Server Error 调用 LoadLibraryEx 失败,在 ISAPI 筛选器 C:\Windows\Microsoft.NET\Frame ...

  10. Java入门 第10天 ,理解数组

    数组的特点: 1.内容的类型固定,不会int String 两个类型一起,要么是int类型 要么是String类型 或者其他类型. 2.长度是固定的,例:String [ ]   myArray  = ...