码迷,mamicode.com
首页 > 其他好文 > 详细

模拟ssh远程命令执行

时间:2019-08-25 19:40:59      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:while   bin   res   soc   内容   stderr   发送   sys   sock   

服务端:

import socket
import subprocess
phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
phone.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) #可以重复适用系统端口
phone.bind((‘192.168.43.14‘, 8081))
phone.listen(5)
while True:
conn, clent_add = phone.accept()
while True:
try:
#1 接受命令
data = conn.recv(1024)
obj = subprocess.Popen(data.decode(‘utf-8‘), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout = obj.stdout.read()
stderr = obj.stderr.read()
#if not data:break #如果客户端挂掉,此方法适用于linux操作系统
#print(data.decode(‘utf-8‘))
#2 执行命令 拿到结果
#3 拔执行命令的结果发送给客户端
conn.send(stdout+stderr) #+"这里可以继续优化
except ConnectionResetError: #如果客户端挂掉,此方法适用于windows操作系统
break
conn.close()
phone.close()





客户端:

import socket
phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
phone.connect((‘192.168.43.14‘, 8081))
while True:
msg = input(‘>>>‘).strip()
if not msg: continue #一旦输入为空,虽然应用层可以收到,但是到应用层的操作系统就没有了,故无法发给服务端
#发命令
phone.send(msg.encode(‘utf-8‘))
#执行命令并发送结果
data = phone.recv(1024) #这里的1024 有个巨大的坑
print(data.decode(‘GBK‘))
phone.close()


补充内容:

import os
res = os.system(‘dir‘)
print(res)


# import subprocess
# obj = subprocess.Popen(‘dffif /‘, shell= True, stdout = subprocess.PIPE, stderr = subprocess.PIPE)
# print(‘正确管道‘, obj.stdout.read().decode(‘GBK‘))
# print(‘错误管道‘, obj.stderr.read().decode(‘GBK‘))

模拟ssh远程命令执行

标签:while   bin   res   soc   内容   stderr   发送   sys   sock   

原文地址:https://www.cnblogs.com/yuexijun/p/11408785.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!