如何在設定一個簡單的HTTP Server來執行Windows命令和截圖
阿新 • • 發佈:2022-12-02
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 """ 4 @file: device_http_server.py 5 @time: 2022/12/2 13:11 6 @file_desc: 7 """ 8 import os 9 from http.server import BaseHTTPRequestHandler, HTTPServer 10 11 import pyautogui 12 import socket 13 14 PORT = 9999 15 IP = socket.gethostbyname(socket.gethostname())View Code16 print(IP) 17 18 19 class ScreenHandler(BaseHTTPRequestHandler): 20 def do_GET(self): 21 cmd = self.path.strip("/") 22 if "." not in cmd and "screenshot" != cmd.lower(): 23 try: 24 print(cmd) 25 if "%20" in cmd: 26 cmd = cmd.replace("%20", " ") 27 cmd_exe = os.popen(cmd) 28 output = cmd_exe.read() 29 self.send_response(200) # HTTP Status Code 30 self.send_header('Content-Type', 'text/plain') 31 self.end_headers() 32 self.wfile.write(output.encode("utf-8")) 33 except Exception as error: 34 pass 35 elif "screenshot" == cmd.lower(): 36 img = pyautogui.screenshot() # Screenshot 37 if img: 38 self.send_response(200) # HTTP Status Code 39 self.send_header('Content-Type', 'image/png') 40 self.end_headers() 41 img.save(self.wfile, 'PNG') # HTTP Response Stream 42 43 44 def main(): 45 try: 46 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 47 # check port is open 48 result = sock.connect_ex((IP, PORT)) 49 portopen = result == 0 50 sock.close() 51 if not portopen: 52 # start web server use defined handler 53 server = HTTPServer((IP, PORT), ScreenHandler) 54 server.serve_forever() # listen 55 except: 56 pass 57 58 59 if __name__ == '__main__': 60 main()
實現遠端在Windows機器上執行命令和截圖。
1. 使用socket和http.server搭建一個簡單的web server.
2. pyautogui實現截圖功能
3. 通過獲取瀏覽器的path, 擷取要執行的命令(注意空格的替換%20), 通過os.popen執行命令,並將結果寫回web頁面。
目前將python程式碼打包成exe放在開機啟動項執行(不可以打包成服務在後臺執行,否則截圖功能沒法使用)
具體程式碼如上。