2016-09-03 2 views
0

У меня вопрос о запуске API окон по протоколу TCP/IP. Например, я хочу передать cmd.exe удаленной машины на другую машину (например, Netcat, полностью имитирующий cmd.exe по TCP/IP). Я искал в Интернете, чтобы сделать это с помощью python, но не смог найти ничего полезного. Я могу сделать это, используя подпроцесс и другие возможности python, но ему не хватает проблем с пользовательским интерфейсом. Я использовал этот вид кода:Python Shellexecute windows api с Ctypes через 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() 

Посмотрите на эту картину: Running CMD over TCP/IP using NetCat tool

ответ

0

я не уверен, что ваша потребность основана на ваше описание, но я постараюсь помочь вам:).

Если вы хотите только активировать CMD.exe на удаленном компьютере с открытым портом, вам, возможно, захочется заглянуть в «серверный скрипт», который выполнит любую переданную ему команду. т.е.

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() 

* ссылка: https://docs.python.org/3.4/library/socketserver.html мне не нужно упоминать, что это действительно не безопасно ...

, если вы действительно хотите, чтобы передать его в питон на стороне сервера, я думаю, Я бы поместил все полученные в сокет в tmp-файл и выполнил над ним python. Как и Ansible do.

Дайте мне знать, если это вам поможет!

+0

Я хочу запустить CMD через сетевое соединение. Как обратная или связанная оболочка cmd. После успешного подключения один из компьютеров должен взять под свой контроль cmd.exe, принадлежащий другому. Я хочу написать сценарий, имитирующий интерактивный cmd.exe, который принадлежит другому компьютеру по сетевому соединению. Вероятно, использование windows apis, как shellexecute по сети, является решением, но я python-новичок и не могу написать его для себя :) – Abdulla

+0

hum ..., подключение SSH к окнам и использование cmd в качестве оболочки по умолчанию является опцией для вашего дела? https://winscp.net/rus/docs/guide_windows_openssh_server После этого вы можете использовать библиотеку paramiko из Python :) http://jessenoller.com/blog/2009/02/05/ssh-programming-with -paramiko-совершенно отличен –

Смежные вопросы