Python实现Windows远程操控Linux:基于Socket的实战教程

Theo
Theo
发布时间:2026-10-14 | 4人浏览过
原创

本文详细介绍如何利用Python的Socket模块,在Windows客户端远程控制Linux服务器。通过配置网络连通性及关闭防火墙,编写服务端与客户端代码,实现远程命令执行及文件双向传输。教程涵盖环境配置、代码逻辑解析及具体测试步骤,帮助开发者掌握跨平台远程管理的基本技能。

Python远程操控Linux系统实战教程

一、学习目标

掌握在Windows环境下通过Python远程操控Linux系统,深入理解Socket网络编程模块的实际应用。

实验环境与前提配置

二、实验环境

Windows客户端(模拟客户端,IP地址:192.168.43.87):运行Python 3.6。 Linux服务端(模拟服务端,IP地址:192.168.43.226):运行Python 2.7。

三、前提条件

确保Windows客户端与Linux服务端之间网络互通,能够互相ping通。 需在Linux服务端关闭防火墙及SELinux安全策略。

四、代码实现

服务端与客户端代码实现

服务端代码(server.py):

服务端核心逻辑解析


#!/usr/bin/env python
#coding:utf-8

import socket
import os

HOST = "192.168.43.226"
PORT = 5000
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
addr = (HOST,PORT)
s.bind(addr)       # 绑定地址
s.listen(1)       # 打开监听
conn,addr = s.accept()  # 同意建立连接
print(addr)       # 输出客户端IP

def get_client_file():   # 定义服务端获取文件函数
  conn.send("Ready to receive!")
  data = conn.recv(20480) # 接受客户端的数据
  print(data)
  with open("clientFile.txt",'wb') as f:
    f.write(data)
  conn.close()

def send_server_file():   # 定义服务端发送文件函数
  c_filepath = conn.recv(1024) # 接受客户机请求路径
  with open(c_filepath,'rb') as f:
    data = f.read()
    conn.sendall(data)
    conn.close()

def main():
  while True:
    cmd = conn.recv(1024)
    print(cmd) # 打印接受的命令
    if cmd == "q":
      break
    if cmd == "transdata":
      get_client_file()  # 获取客户端文件
      break
    if cmd == "recvdata":
      send_server_file() # 发送服务端文件
      break    
    data = os.popen(cmd)  # 响应客户端命令
    sdata = data.read()   
    if sdata:
      conn.sendall(sdata)
    else:
      conn.send("finish")     
  conn.close()  
  s.close()  
if __name__ == "__main__":
  main()

客户端代码(client.py):

客户端交互逻辑解析


import socket

HOST = "192.168.43.226"
PORT = 5000
c = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
addr = ((HOST,PORT))
c.connect(addr)     # 连接服务器

def send_client_file(): # 定义客户端发送文件函数
  data = c.recv(1024)   # 接收预备传输提示
  print(data)       
  c_filepath = input("Please enter the client file path:")
  with open(c_filepath,"rb") as f:
    file = f.read()   # 以byte方式读取文件内容
  c.sendall(file)     # 将读取的内容发往服务端

def get_server_file():   # 定义客户端接受文件函数
  s_filepath = input("Please enter the server file path:")
  c.send(bytes(s_filepath,encoding='gbk'))
  data = c.recv(20480)  # 等待接受服务器数据
  with open("shadow.txt","wb") as f:
    f.write(data)

def main():

  while True:
    cmd = input("Plsase input a command:")
    c.send(bytes(cmd,encoding="gbk"))  # 发送数据
    if cmd == "q":
      break
    if cmd == "transdata":   # 创建发送客户端文件命令
      send_client_file()
      break
    if cmd == "recvdata":    # 创建接收服务端文件命令
      get_server_file()
      break
    data = c.recv(20480)
    print(data)
  c.close()

if __name__ =="__main__":
  main()

远程命令执行与文件传输测试

五、测试结果(以获取服务端shadow文件为例)

在Windows环境下运行client.py文件。 操作步骤: 1. 键入命令:recvdata 2. 键入目标文件路径:/etc/shadow

欢迎感兴趣的朋友共同研究、讨论,交流技术心得!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表