socket 基於tcp實現遠端執行命令

2022-09-11 14:36:26 字數 1871 閱讀 4090

server.py

#

socket 基於tcp實現遠端執行命令

from socket import *

import

subprocess

ip_port = ('

127.0.0.1

', 8080)

back_log = 5buffer_size = 1024tcp_server =socket(af_inet, sock_stream)

tcp_server.bind(ip_port)

tcp_server.listen(back_log)

while

true:

conn, addr =tcp_server.accept()

while

true:

try:

cmd =conn.recv(buffer_size)

ifnot cmd: break

cmd = cmd.decode('

utf-8')

print('

收到客戶端命令

', cmd)

res = subprocess.popen(cmd, shell=true, #

第乙個引數:命令字串,第二個引數指定由shell處理

stderr=subprocess.pipe, #

將基本的輸入、輸出及錯誤都放入管道

stdin=subprocess.pipe, #

這些在管道裡的資訊都是位元組形式,編碼為utf-8

stdout=subprocess.pipe

)err = res.stderr.read() #

定義乙個err變數接收基本的錯誤資訊

if err: #

如果錯誤資訊不為空

cmd_res = err #

輸出的結果為基本的錯誤資訊

else

: cmd_res = res.stdout.read() #

輸出的結果為基本的輸出資訊

ifnot cmd_res: #

有些命令無返回結果,需要進行判斷

cmd_res = '

該命令沒有返回結果

'.encode('

gbk'

) conn.send(cmd_res)

#向客戶端傳送執行的結果

except

exception:

break

conn.close()

tcp_server.close()

client.py

from socket import *ip_port = ('

127.0.0.1

', 8080)

tcp_client =socket(af_inet, sock_stream)

tcp_client.connect(ip_port)

while

true:

cmd = input('

請輸入命令

').strip()

ifnot cmd: continue

if cmd == '

quit

': break

cmd = cmd.encode('

utf-8')

tcp_client.send(cmd)

cmd_res = tcp_client.recv(1024) #

這裡會有粘包現象產生

print('

命令執行的結果是

', cmd_res.decode('

gbk')) #

windows系統預設編碼為gbk

基於tcp實現遠端執行命令

1 author kelvin2 date 2019 1 30 20 10 3from socket import 4import subprocess 56 ip conf 127.0.0.1 8888 7 buffer capacity 1024 8 tcp server socket af i...

程式設計實現基於tcp的socket程式設計

server端 public class server socket.shutdowninput 關閉輸入流 4 獲取輸出流,響應客戶端的請求 outputstream os socket.getoutputstream printwriter pw new printwriter os 包裝為列印...

基於TCP的socket程式設計

sockets 套接字 程式設計有三種,流式套接字 sock stream 資料報套接字 sock dgram 原始套接字 sock raw 基於 tcp的 socket 程式設計是採用的流式套接字。在這個程式中,將兩個工程新增到乙個工作區。要鏈結乙個 ws2 32.lib 的庫檔案。伺服器端程式設...