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的套接字 ...
随机推荐
- 【计算几何】【状压dp】Codeforces Round #226 (Div. 2) D. Bear and Floodlight
读懂题意发现是傻逼状压. 只要会向量旋转,以及直线求交点坐标就行了.(验证了我这俩板子都没毛病) 细节蛮多. #include<cstdio> #include<algorithm& ...
- 【暴力】bzoj3713 [PA2014]Iloczyn
没什么好说的. #include<cstdio> using namespace std; typedef long long ll; ]; int main() { scanf(]=; ...
- 显示字符 Exercise06_12
/** * @author 冰樱梦 * 时间:2018年下半年 * 题目:显示字符 *1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J ...
- Python的hashlib
Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制 ...
- Swift,下标简化方法的调用
在类(class)当中采用subscript的方法直接用下标 class a{ func b(number:Int)->Int{ return number } subscript(number ...
- servlet之request和response的使用区分
有的时候在写servlet程序时,我总是被一个方法该用request去调用.还是用response去调用而困惑.从而造成编程时间的延长. 我在区分request和response的使用时,使用的方法是 ...
- 最简单的PHP socket
服务端 <?phperror_reporting(E_ALL);set_time_limit(0); $ip = "127.0.0.1";$port = 1935; func ...
- python 列表合并
列表合并主要有以下方法: 1.用list的extend方法,L1.extend(L2),该方法将参数L2的全部元素添加到L1的尾部 结果:[1, 2, 3, 4, 5, 1, 20, 30] 2.用切 ...
- 【招聘App】—— React/Nodejs/MongoDB全栈项目:socket.io&聊天实现
前言:最近在学习Redux+react+Router+Nodejs全栈开发高级课程,这里对实践过程作个记录,方便自己和大家翻阅.最终成果github地址:https://github.com/66We ...
- Netty源码细节IO线程(EventLoop)(转)
原文:http://budairenqin.iteye.com/blog/2215896 源码来自Netty5.x版本, 本系列文章不打算从架构的角度去讨论netty, 只想从源码细节展开, 又不想通 ...