python3 socket远程执行代码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python3 socket远程执行代码相关的知识,希望对你有一定的参考价值。

技术分享
 1 import socket
 2 import struct
 3 import json
 4 import subprocess
 5 phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #买手机
 6 phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) #就是它,在bind前加
 7 phone.bind((127.0.0.1,8080)) #插入卡
 8 phone.listen(5) #开机
 9 while True: #链接循环
10     conn,addr=phone.accept()
11     print(client :,addr)
12     while True: #通讯循环
13         try:
14             cmd=conn.recv(1024)
15             if not cmd:break #针对linux,客户端断开链接的异常处理
16             print(from client msg :%s %cmd)
17 
18             res=subprocess.Popen(cmd.decode(utf-8),
19                              shell=True,
20                              stdout=subprocess.PIPE,
21                              stderr=subprocess.PIPE)
22 
23             err=res.stderr.read()
24             if err:
25                 back_msg=err
26             else:
27                 back_msg=res.stdout.read()
28             #第一阶段:制作报头
29             head_dic={
30                 data_size:len(back_msg)
31             }
32             head_json=json.dumps(head_dic)
33             head_bytes=head_json.encode(utf-8)
34 
35             #第二阶段:发送报头的长度
36             conn.send(struct.pack(i,len(head_bytes)))
37 
38             #第三阶段:发报头
39             conn.send(head_bytes)
40             #第四阶段:发真实数据
41             conn.sendall(back_msg)
42 
43 
44         except Exception:
45             break
46     conn.close()
47 phone.close()
server
技术分享
 1 import socket
 2 import struct
 3 import json
 4 client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
 5 client.connect((127.0.0.1,8080))
 6 
 7 while True:
 8     cmd=input(>>: ).strip()
 9     if not cmd:continue
10 
11     client.send(cmd.encode(utf-8))
12 
13     #收报头的长度
14     head=client.recv(4)
15     head_size=struct.unpack(i,head)[0]
16 
17     #收报头(根据报头长度)
18     head_bytes=client.recv(head_size)
19     head_json=head_bytes.decode(utf-8)
20     head_dic=json.loads(head_json)
21     ‘‘‘
22       head_dic={
23                 ‘data_size‘:len(back_msg)
24             }
25     ‘‘‘
26     data_size=head_dic[data_size] #取出真实数据的长度
27 
28     #收真实的数据
29     recv_size=0
30     recv_bytes=b‘‘
31     while recv_size < data_size:
32         res=client.recv(1024)
33         recv_bytes+=res
34         recv_size+=len(res)
35     print(recv_bytes.decode(gbk))
client

 

以上是关于python3 socket远程执行代码的主要内容,如果未能解决你的问题,请参考以下文章

在Python3中,socket.recv方法如果一段时间内没有收到返回,如何让这段代码跳过,并执行下一步操作

GitGit 分支管理 ( 克隆远程分支 | 克隆 master 分支 git clone | 查看远程分支 git branch -a | 克隆远程分支 git checkout -b )(代码片段

GitGit 分支管理 ( 克隆远程分支 | 克隆 master 分支 git clone | 查看远程分支 git branch -a | 克隆远程分支 git checkout -b )(代码片段

学习笔记:python3,代码片段(2017)

scrapy主动退出爬虫的代码片段(python3)

scrapy按顺序启动多个爬虫代码片段(python3)