socket编程之实现简单的ssh
服务器代码:
#-*- coding:utf-8 -*-
#edited by python3.6
#
import socket,os '''
创建socket对象
'''
server = socket.socket() '''
绑定ip和端口
'''
server.bind(('localhost',23233)) '''
监听端口
'''
server.listen() while True:
conn,addr = server.accept()
print('======welcome to use leo\'s ssh========')
print('new connection:',addr)
while True:
print('等待新指令-->\r')
data = conn.recv(1024)
if not data:
print('客户端已断开!')
break
print('执行命令:',data)
cmd_result = os.popen(data.decode()).read() #接收来自客户端的数据
print('发送前的数据大小(byte):',len(cmd_result))
if len(cmd_result) == 0:
cmd_result = 'cmd has not output...'
conn.send(str(len(cmd_result.encode())).encode('utf-8'))
conn.send(cmd_result.encode('utf-8'))
print('发送完成。')
print('=========end==============\r')
'''
关闭程序
'''
server.close()
注:上述代码可能会造成粘包问题(即缓冲区将2行代码合并成一行执行),解决方式如下:
服务器:
conn.send(str(len(cmd_result.encode())).encode('utf-8'))
client_ack = conn.recv(1024)
conn.send(cmd_result.encode('utf-8'))
客户端:
print('命令执行结果大小为(byte):',cmd_result_size)
client.send('可以开始发送数据了!'.encode('utf-8'))
recv_size = 0
recv_data = b''
客户端代码:
#-*- coding:utf-8 -*-
#edited by python3.6
#
import socket '''
创建socket对象
'''
client = socket.socket() '''
连接到服务器
'''
client.connect(('localhost',23233)) while True:
cmd = input('[client]$ ').strip()
if len(cmd) == 0:continue
client.send(cmd.encode('utf-8'))
cmd_result_size = client.recv(1024)
print('命令执行结果大小为(byte):',cmd_result_size)
recv_size = 0
recv_data = b'' while recv_size < int(cmd_result_size.decode()):
data = client.recv(1024)
recv_size += len(data)
recv_data += data
else:
print('cmd result receive done...',recv_size)
print(recv_data.decode()) '''
关闭程序
'''
client.close()
socket编程之实现简单的ssh的更多相关文章
- 使用socket编程实现一个简单的文件服务器
使用socket编程实现一个简单的文件服务器.客户端程序实现put功能(将一个文件从本地传到文件服务器)和get功能(从文件服务器取一远程文件存为本地文件).客户端和文件服务器不在同一台机器上. pu ...
- Win Socket编程原理及简单实例
[转]http://www.cnblogs.com/tornadomeet/archive/2012/04/11/2442140.html 使用Linux Socket做了小型的分布式,如Linux ...
- Linux C Socket编程原理及简单实例
部分转自:http://goodcandle.cnblogs.com/archive/2005/12/10/294652.aspx 1. 什么是TCP/IP.UDP? 2. Socket在哪里 ...
- C#版 Socket编程(最简单的Socket通信功能)
示例程序是同步套接字程序,功能很简单,只是客户端发给服务器一条信息,服务器向客户端返回一条信息:这里只是一个简单的示例,是一个最基本的socket编程流程,在接下来的文章中,会依次记录套接字的同步和异 ...
- java基础之Socket编程概述以及简单案例
概述: 用来实现网络互连的 不同的计算机上 运行的程序间 可以进行数据交互 也就是用来在不同的电脑间, 进行数据传输. 三大要素: IP地址: 设备(电脑,手机,ipad)在网络中的唯一标识. 组成 ...
- python socket编程实现的简单tcp迭代server
与c/c++ socket编程对照见http://blog.csdn.net/aspnet_lyc/article/details/38946915 server: import socket POR ...
- socket 编程 TCP 实现简单聊天功能【转】
转自:http://blog.csdn.net/liujia2100/article/details/9006479 版权声明:本文为博主原创文章,未经博主允许不得转载. 各个主要函数的功能: .so ...
- socket编程模拟linux下的ssh代码实现
实现思路: 1.提供输入指令的客户端: 2.提供返回执行指令结果的服务端 3.寻找服务端返回结果一次无法全部接收的解决思路 服务端代码(ssh_server.py) #coding=utf-8 imp ...
- Python 基础之socket编程(二)
Python 基础之socket编程(二) 昨天只是对socket编程做了简单的介绍,只是把socket通信的框架搭建起来,要对其中的功能进行进一步的扩充,就来看看今天的料哈! 一.基于tcp的套接字 ...
随机推荐
- Chrome插件在页面上直接绑定JavaScript事件提示Refused to execute inline event handler because it violates the following Co
Chrome插件问了安全是不提倡在页面上直接写JavaScript的,如果出现了这个提示,其实也没有什么,同样可以运行. 从Chrome Extenstion V2开始,不允许执行任何inline j ...
- nginx+php简单配置环境
首先我的需求是: 1. 需要有PHP的服务.web目录存放在各处. 2. 需要有多个端口. 步骤: 1. 安装nginx php,我的系统是mac 所以安装使用brew, 一键完成... 2. 开启p ...
- 【java】子类可以通过调用父类的public方法调用父类的private方法,为什么?
代码1: 打印结果: 代码2: 运行结果: 问题: 代码1中super是父类自己调用自己的add()方法,并在add()方法中调用了私有的del()方法,那为什么打印出来的this是子类? 代码2中t ...
- VisualSVN设置提交时必须输入log信息
在别人的基础上修改的: 自己在Windows上用VisualSVN搭了个服务器,默认提交代码是可以不填任何信息,这可不是我所期望的,于是找到了下面的解决方案: 在VisualSVN的管理控制台中可以设 ...
- pomise的简单用法
1.then的基本简单用法,当异步获取完数据后就会自动执行then的方法 function runAsync1(){ var p = new Promise(function(resolve, rej ...
- ubuntu登录黑屏“failed to start session”, gdm+kdm+lightdm
sudo apt-get install ubuntu-desktop sudo systemctl start gdm sudo service lightdm restart sudo syste ...
- lsof/fuser卸载挂载文件
Linux如何卸载挂载文件 在我们进行远程文件操作的时候,我们经常会出现文件服务出现卸载掉哦情况.例如 umount /mnt/net1umount: /mnt/net1: device is b ...
- Android Http POST文件上传之-----RFC1867协议
RFC1867协议介绍 RFC1867协议主要是在HTTP协议的基础上为INPUT标签添加了file属性.同一时候限定了Form的method必须为POST,ENCTYPE必须为 ...
- 【自动部署】服务器自动化操作 RunDeck
RunDeck 是用 Java/Grails 写的开源工具,帮助用户在数据中心或者云环境中自动化各种操作和流程.通过命令行或者web界面,用户可以对任意数量的服务器进行操作,大大降低了对服务器自动化的 ...
- Python3环境安装Scrapy爬虫框架过程及常见错误
收录待用,修改转载已取得腾讯云授权 Scrapy安装介绍 Scrapy的安装有多种方式,它支持Python2.7版本及以上或Python3.3版本及以上.下面说明Python3环境下的安装过程. Sc ...