博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
day32基于tcp协议的远程执行命令
阅读量:4568 次
发布时间:2019-06-08

本文共 2177 字,大约阅读时间需要 7 分钟。

客户端

from socket import * import struct import json client = socket(AF_INET, SOCK_STREAM) client.connect(('127.0.0.1', 8081)) # 通信循环 while True:     cmd=input('>>: ').strip()     if len(cmd) == 0:continue     client.send(cmd.encode('utf-8'))     #1. 先收4bytes,解出报头的长度     header_size=struct.unpack('i',client.recv(4))[0]     #2. 再接收报头,拿到header_dic     header_bytes=client.recv(header_size)     header_json=header_bytes.decode('utf-8')     header_dic=json.loads(header_json)     print(header_dic)     total_size=header_dic['total_size']     #3. 接收真正的数据     cmd_res=b''     recv_size=0     while recv_size < total_size:         data=client.recv(1024)         recv_size+=len(data)         cmd_res+=data     print(cmd_res.decode('gbk')) 服务端
# 服务端必须满足至少三点: # 1. 绑定一个固定的ip和port # 2. 一直对外提供服务,稳定运行 # 3. 能够支持并发 from socket import * import subprocess import struct import json server = socket(AF_INET, SOCK_STREAM) server.bind(('127.0.0.1', 8081)) server.listen(5) # 链接循环 while True:     conn, client_addr = server.accept()     print(client_addr)     # 通信循环     while True:         try:             cmd = conn.recv(1024)  # cmd=b'dir'             if len(cmd) == 0: break  # 针对linux系统             obj = subprocess.Popen(cmd.decode('utf-8'),                                    shell=True,                                    stdout=subprocess.PIPE,                                    stderr=subprocess.PIPE                                    )             stdout = obj.stdout.read()             stderr = obj.stderr.read()             # 1. 先制作报头             header_dic = {
'filename': 'a.txt', 'md5': 'asdfasdf123123x1', 'total_size': len(stdout) + len(stderr) } header_json = json.dumps(header_dic) header_bytes = header_json.encode('utf-8') # 2. 先发送4个bytes(包含报头的长度) conn.send(struct.pack('i', len(header_bytes))) # 3 再发送报头 conn.send(header_bytes) # 4. 最后发送真实的数据 conn.send(stdout) conn.send(stderr) except ConnectionResetError: break conn.close()
 

转载于:https://www.cnblogs.com/wu-jia/p/9580773.html

你可能感兴趣的文章
.net中WebService的使用实例
查看>>
editplus的配色
查看>>
最近3年股息率最高排名
查看>>
ural 1091. Tmutarakan Exams 和 codeforces 295 B. Greg and Graph
查看>>
IO流(四)
查看>>
Java 序列化Serializable
查看>>
Spring在web请求中定义编码(org.springframework.web.filter.CharacterEncodingFilter)
查看>>
[数据库基础]——编码标准之结构
查看>>
c++模版函数
查看>>
android Fragments详解二:创建Fragment
查看>>
VMware Tools (ubuntu系统)安装详细过程与使用
查看>>
Oracle性能优化-读懂执行计划
查看>>
关于VC弹出选择文件夹对话框
查看>>
perl多线程理解
查看>>
[原]three.js绘制过程(二)
查看>>
[SHOI2009] 交通网络
查看>>
supervisor 监控redis & mongodb
查看>>
Java编程思想读书笔记_第三章
查看>>
linux下nginx安装方法
查看>>
在django中应用装饰器(一)
查看>>