学习笔记(09):Python网络编程并发编程-模拟ssh远程执行命令-代码实现
立即学习:https://edu.csdn.net/course/play/24458/296239?utm_source=blogtoedu
1.服务器端:接收客户端发送的命令,subprocess.POPE()函数可用于产生一个子进程,并且返回子进程的结果
import socket
import subprocessphone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
phone.bind(('127.0.0.1',8080))
phone.listen(5)
while True:#1)接收客户端发送过来的命令res = phone.accept()conn,client_addr = reswhile True:try:cmd = conn.recv(1024)#2)处理命令,执行命令并且获得命令得到的结果obj = subprocess.Popen(cmd.decode('utf-8'),shell=True,stdout=subprocess.PIPE,#将正确运行命令得到的结果传给管道stdout中stderr=subprocess.PIPE)#将没有正确运行命令得到的返回信息存放在stderr管道中stdout = obj.stdout.read()stderr = obj.stderr.read()data = stdout + stderr#3)将结果进行发送给客户端conn.send(data)except ConnectionResetError:breakconn.close()
phone.close()
2.客户端:向服务器端发送一个命令,并且获取由服务器执行命令后的结果,并且打印出来,主要知识点:subprocess/Popen/stdout=subprocess.PIPE/stderr=subprocess.PIPE
import socket
#1、设置phone套接字
phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#2、连接服务器(打电话),本地地址:127.0.0.1
phone.connect(('127.0.0.1',8080))
#3、向服务器发送请求send(),发送的数据不能直接发送字符串,因为要传送到物理层底层,因此需要转换成二进制的bytes类型进行发送,只需:发送的数据.encode('utf-8')即可
while True:'''实现在客户端输入一个命令,然后命令发送给服务器端,服务器端进行命令的执行,然后再服务器端执行的命令的结果返回给客户端'''#1)、向服务器端发送命令cmd = input("请输入命名:")#修复客户端发送空字符串而服务器卡在接收信息处的bug,continue表示跳出本次循环,重新开始下一次的循环if not cmd:continuephone.send(cmd.encode('utf-8'))#2)、接收服务器端执行命令后的结果res = phone.recv(1024)#接收小于1024bytes的数据print('服务器返回来的数据:',res.decode('gbk'))#5、关闭套接字phone
phone.close()
3.注:客户端发送给服务器的数据必须是bytes类型,使用encode('utf-8'),客户端接收到的数据也是bytes类型,如果需要在客户端打印出接收到服务器的bytes类型数据,那就需要解码,window系统默认的解码方式‘gbk’,Linux系统默认的解码方式是“utf-8”,需要打印则用语句:
#data是客户端接收到的由服务器传回来的bytes类型数据,此处是windows系统,默认的解码方式是gbkprint(data.decode('gbk'))
4.补充:windows命令
1)dir:返回子文件名和子文件夹名
2)ipconfig:返回本地网关ip地址
3)tasklist:返回正在运行的进程的相关信息
5.上述程序运行的结果,下面的结果出现了粘包现象,具体粘包的含义以及出现的原因和结果方法见下一篇学习笔记
请输入命名:dir /
服务器返回来的数据: 无效开关 - ""。请输入命名:dir
服务器返回来的数据: 驱动器 C 中的卷是 本地磁盘卷的序列号是 B476-3C7CC:\Users\jinlin\Desktop\python_further_study\socket编程\模拟ssh远程操作命令 的目录2020/03/07 14:01 <DIR> .
2020/03/07 14:01 <DIR> ..
2020/03/07 13:35 0 __init__.py
2020/03/07 10:02 895 客户端_.py
2020/03/07 14:01 1,055 服务器端_.py3 个文件 1,950 字节2 个目录 125,989,347,328 可用字节请输入命名:dir e
服务器返回来的数据: 驱动器 C 中的卷是 本地磁盘卷的序列号是 B476-3C7CC:\Users\jinlin\Desktop\python_further_study\socket编程\模拟ssh远程操作命令 的目录找不到文件请输入命名:dir /e
服务器返回来的数据: 无效开关 - "e"。请输入命名:tasklist
服务器返回来的数据:
映像名称 PID 会话名 会话# 内存使用
========================= ======== ================ =========== ============
System Idle Process 0 Services 0 4 K
System 4 Services 0 584 K
smss.exe 324 Services 0 804 K
csrss.exe 524 Services 0 9,040 K
csrss.exe 620 Console 1 30,284 K
wininit.exe 628 Services 0 4,144 K
winlogon.exe 656 Console 1 6,512 K
services.exe 724 Services 0 8,284 K
lsass.exe 732 Services 0 11,456 K
svchost.exe 804 Services 0 11,364 K
svchost.exe 844 Services 0 8,864 K
dwm.exe
请输入命名:ipconfig
服务器返回来的数据: 948 Console 1 24,472 K
nvvsvc.exe 956 Services 0 4 K
nvxdsync.exe 1000 Console 1 824 K
nvvsvc.exe 1008 Console 1 200 K
svchost.exe 276 Services 0 30,968 K
svchost.exe 392 Services 0 43,000 K
svchost.exe 412 Services 0 24,864 K
svchost.exe 736 Services 0 49,704 K
RtkAudioService64.exe 1056 Services 0 4 K
RAVBg64.exe 1076 Console 1 352 K
RAVBg64.exe 1084 Console 1 344 K
ZhuDongFangYu.exe 1128 Services 0 3,320 K
svchost.exe 1280 Services 0 16,404 K
spoolsv.exe
学习笔记(09):Python网络编程并发编程-模拟ssh远程执行命令-代码实现相关推荐
- 学习笔记(10):Python网络编程并发编程-粘包现象
立即学习:https://edu.csdn.net/course/play/24458/296240?utm_source=blogtoedu 粘包现象:服务器接收到客户端的命令后,进行执行得到结果后 ...
- 学习笔记(19):Python网络编程并发编程-互斥锁
立即学习:https://edu.csdn.net/course/play/24458/296430?utm_source=blogtoedu 1.互斥锁: 多进程间的内存是相互隔离的,因此其数据也是 ...
- 学习笔记(34):Python网络编程并发编程-异步调用与回调机制
立即学习:https://edu.csdn.net/course/play/24458/296452?utm_source=blogtoedu 1.知识点:(详细见代码注释) 1)同步调用: res1 ...
- 学习笔记(33):Python网络编程并发编程-进程池线程池
立即学习:https://edu.csdn.net/course/play/24458/296451?utm_source=blogtoedu 进程池与线程池: 一般应用在网站上,进程池或线程池最大的 ...
- 学习笔记(28):Python网络编程并发编程-死锁与递归锁
立即学习:https://edu.csdn.net/course/play/24458/296445?utm_source=blogtoedu 1.死锁(Lock()的局限性) 知识点:Lock()只 ...
- 学习笔记(18):Python网络编程并发编程-守护进程
立即学习:https://edu.csdn.net/course/play/24458/296429?utm_source=blogtoedu 守护进程(了解) 1.概念:守护进程是主进程在创建子进程 ...
- 学习笔记(12):Python网络编程并发编程-解决粘包问题-简单版本
立即学习:https://edu.csdn.net/course/play/24458/296243?utm_source=blogtoedu 粘包现象的解决:简单版 1.思路: 在服务器 ...
- 学习笔记(14):Python网络编程并发编程-文件传输功能实现
立即学习:https://edu.csdn.net/course/play/24458/296245?utm_source=blogtoedu 1.课程目的: 实现客户端输入下载文件的命令,然后将命令 ...
- 学习笔记(08):Python网络编程并发编程-实现服务端可以对多个客户端提供服务
立即学习:https://edu.csdn.net/course/play/24458/296237?utm_source=blogtoedu 链接循环,一个服务器服务多个客户端, 思路1:服务器一个 ...
最新文章
- hive脚本执行方式
- 用碧海潮声制作的宋体(雅黑宋体)替换Windows7原生的火柴棍式的宋体
- 【Github】怎么在README.md中添加图片?
- 数据治理与元模型_开放项目的治理模型如何演变
- 北京网信金服PHP薪资_【企航金服工资|企航金服待遇怎么样】-看准网
- Rhino基础教程---四管混接、五管混接
- 记一次使用Openssl生成p12证书搭建https证书
- {@link}注解的使用 -------代码注释
- 大学生html5实训报告,大学生实训心得体会范文(精选5篇)
- Echarts 柱状图调整 y 轴单位标题与图表之间的距离
- 如何回复SCI审稿人评审意见(response letter)
- 虚拟机做dcs服务器,虚拟机技术的DCS仿真 - 机械设计 - 电子发烧友网
- 学shell和python哪个难_shell与python的优劣对比到底用哪个
- 火狐(FireFox)黑客常用插件
- opencv鱼眼镜头矫正
- 信息熵与信息增益的概念
- 从头开始敲代码之《从BaseApplication/Activity开始(五)》(自定义控件,实现点击/滑动翻页)
- 量子态操作:基于门的三态旋转
- 北京地铁站经纬度集合(包含大部分)
- 透过日播放量超过6亿的《延禧攻略》,看2018视频网站格局