シミュレーションsshリモート実行コマンド
1507 ワード
目次一、サービス側 二、クライアント 一、サービス端
二、クライアント
from socket import *
import subprocess
server = socket(AF_INET, SOCK_STREAM)
server.bind(('127.0.0.1', 8000))
server.listen(5)
print('start...')
while True:
conn, client_addr = server.accept()
while True:
print('from client:', client_addr)
cmd = conn.recv(1024)
if len(cmd) == 0: break
print('cmd:', cmd)
obj = subprocess.Popen(cmd.decode('utf8'), # cmd
shell=True, # shell
stderr=subprocess.PIPE, # ,
stdout=subprocess.PIPE) # ,
stdout = obj.stdout.read() #
stderr = obj.stderr.read() #
conn.send(stdout)
conn.send(stderr)
conn.close()
server.close()
二、クライアント
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 8000))
while True:
data = input('please enter your data')
client.send(data.encode('utf8'))
data = client.recv(1024)
print('from server:', data)
client.close()
dir
コマンドが入力され、サービス側が1024バイト未満のバイトを送信するため、クライアントは受け入れることができる.tasklist
コマンドを入力します.サービス側が1024バイト以上を送信するため、クライアントはデータの一部しか受け入れません.また、dir
コマンドを再入力すると、クライアントはdir
コマンドの結果を受信しますが、前回の残りの未送信データが印刷されます.これがパッケージの問題です.