Socket模拟SSH

主要思路

客户端发送相关命令到服务端,服务端执行命令(通过subprocess模块实现)然后将结果返回给客户端

小知识

Linux中可以发送空数据,服务端能接受到空数据

windows发送空数据,服务端是接收不到的

服务端

from socket import *
import subprocess server=socket(AF_INET,SOCK_STREAM) server.bind(('127.0.0.1',9000))
server.listen(5) print("服务器启动成功") while True:
print("服务器等待连接...")
conn,addr=server.accept()
print(f"{addr}连接成功")
while True:
cmd=conn.recv(1024)
print("收到指令",cmd)
# 把cmd解码成字符串
zx=cmd.decode('utf8') if zx=="q":
break #shell启动,运行命令
#把正确信息放入管道
#把错误信息放入管道
result=subprocess.Popen(zx,shell=True,stderr=subprocess.PIPE,stdout=subprocess.PIPE)
#取出管道中的正确和错误运行结果
t_result=result.stdout.read()
f_result=result.stderr.read() conn.send(t_result)
conn.send(f_result) print("返回结果成功")
conn.close()

客户端

from socket import *

client=socket()

client.connect(('127.0.0.1',9000))
while True:
cmd=input("请输入要执行的命令:") client.send(cmd.encode("utf8")) data=client.recv(1024) #打印执行结果
print(data.decode('GBK'))

最新文章

  1. C#中Dictionary<TKey,TValue>排序方式
  2. Ubuntu Linux 12.04 LTS amd64系统本地root提权
  3. UML详解
  4. 【安全组网】思科IOS设备基础应用
  5. php 加密解密方法2
  6. Black Box《优先队列》
  7. Bulk-Only传输协议 UFI命令块规范
  8. MDK常见错误详解集合
  9. JAVA多线程suspend()、resume()和wait()、notify()的区别
  10. python Asyncore.dispatcher 理解
  11. Dive in python Chapter4 实例
  12. 【转】JS判断SWF,JPG加载完毕、兼容(Activex,plugIn)所有浏览器
  13. 第 7 章 MySQL 数据库锁定机制
  14. ruby 安装 mysql2 命令
  15. 如何在FineUIMvc(ASP.NET MVC)中显示复杂的表格列数据(列表和对象)?
  16. Python3+SQLAlchemy不使用字段名获取主键值教程
  17. Maven_3 如何从Maven远程存储库下载
  18. mac 上传下载iterm2
  19. 2.23 js处理日历控件(修改readonly属性)
  20. [转]Spring中property-placeholder的使用与解析

热门文章

  1. ABAP中将Unicode字符串转换成中文的方法
  2. 医生智能提醒小程序数据库设计心得——Legends Never Die
  3. 爬虫之scrapy简介
  4. [考试反思]1109csp-s模拟测试106:撞词
  5. Groovy单元测试框架spock数据驱动Demo
  6. java多线程回顾3:线程安全
  7. Hybrid App: 看看第三方WebViewJavascriptBridge是如何来实现Native和JavaScript交互
  8. Vue项目性能优化整理
  9. nyoj 45-棋盘覆盖 (高精度, Java)
  10. nyoj 599-奋斗的小蜗牛 (double ceil(); (temp - 1) / 5)