Socket模拟SSH
2024-09-01 18:52:55
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'))
最新文章
- C#中Dictionary<;TKey,TValue>;排序方式
- Ubuntu Linux 12.04 LTS amd64系统本地root提权
- UML详解
- 【安全组网】思科IOS设备基础应用
- php 加密解密方法2
- Black Box《优先队列》
- Bulk-Only传输协议 UFI命令块规范
- MDK常见错误详解集合
- JAVA多线程suspend()、resume()和wait()、notify()的区别
- python Asyncore.dispatcher 理解
- Dive in python Chapter4 实例
- 【转】JS判断SWF,JPG加载完毕、兼容(Activex,plugIn)所有浏览器
- 第 7 章 MySQL 数据库锁定机制
- ruby 安装 mysql2 命令
- 如何在FineUIMvc(ASP.NET MVC)中显示复杂的表格列数据(列表和对象)?
- Python3+SQLAlchemy不使用字段名获取主键值教程
- Maven_3 如何从Maven远程存储库下载
- mac 上传下载iterm2
- 2.23 js处理日历控件(修改readonly属性)
- [转]Spring中property-placeholder的使用与解析
热门文章
- ABAP中将Unicode字符串转换成中文的方法
- 医生智能提醒小程序数据库设计心得——Legends Never Die
- 爬虫之scrapy简介
- [考试反思]1109csp-s模拟测试106:撞词
- Groovy单元测试框架spock数据驱动Demo
- java多线程回顾3:线程安全
- Hybrid App: 看看第三方WebViewJavascriptBridge是如何来实现Native和JavaScript交互
- Vue项目性能优化整理
- nyoj 45-棋盘覆盖 (高精度, Java)
- nyoj 599-奋斗的小蜗牛 (double ceil(); (temp - 1) / 5)