2016-09-03 7 views
0

J'ai une question à propos de l'exécution de Windows API sur protocole TCP/IP. Par exemple, je souhaite amener cmd.exe de la machine distante sur une autre machine (comme Netcat, en simulant complètement cmd.exe sur TCP/IP). J'ai cherché en ligne pour le faire avec python mais je n'ai rien trouvé d'utile. Je peux le faire en utilisant des sous-processus et d'autres capacités python mais il manque un problème d'interface utilisateur. J'ai utilisé ce genre de code:Python Shellexecute Windows api avec Ctypes sur 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() 

Regardez cette image: Running CMD over TCP/IP using NetCat tool

Répondre

0

Je ne sais pas ce que votre besoin est basé sur votre description, mais je vais essayer de vous aider à:). Si tout ce que vous voulez est d'activer CMD.exe sur une machine distante avec un port en cours d'ouverture, vous voudrez peut-être regarder dans un "script serveur" qui exécutera toute commande qui lui est passée. -à-dire

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 Je ne ai pas besoin de mentionner que ce qui est vraiment pas sécurisé ...

si vous voulez vraiment passer à python sur le côté serveur, je pense Je mettrais tout ce qui est reçu sur le socket dans un fichier tmp et j'exécuterai python par-dessus. Comme Ansible faire. Faites-moi savoir si cela vous a aidé!

+0

Je souhaite exécuter CMD sur une connexion réseau. Comme inverser ou lier cmd shell. Une fois la connexion réussie, l'un des ordinateurs doit prendre le contrôle de cmd.exe appartenant à un autre ordinateur. Je veux écrire le script simulant interactif cmd.exe appartient à l'autre ordinateur sur la connexion réseau. Probablement, en utilisant windows apis comme shellexecute sur le réseau est la solution mais je suis python-newbie et ne peux pas l'écrire pour moi-même :) – Abdulla

+0

hum ..., reliant SSH à windows et en utilisant le cmd comme le "défaut" shell est une option pour votre cas? https://winscp.net/eng/docs/guide_windows_openssh_server Vous pouvez ensuite utiliser la bibliothèque paramiko de Python :) http://jessenoller.com/blog/2009/02/05/ssh-programming-with -paramiko-complètement-différent –