首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >远程命令执行Python

远程命令执行Python
EN

Stack Overflow用户
提问于 2014-05-28 06:10:15
回答 1查看 356关注 0票数 0

出于教育目的,我设置了一台服务器,允许在Windows上远程执行命令--或者更确切地说,我试图这样做。由于某些原因,命令行拒绝识别我发送的某些命令,但其他命令可以正常工作。例如,发送命令echo "Hello World!!!"会导致一个cmd窗口弹出,上面写着"Hello World!“。很好。但是,当我发送命令shutdown /s /t 30时,它给出了不正确的语法/关闭命令的帮助屏幕。当我发送命令msg * "Hello World"时,它告诉我'msg‘不是可识别的内部或外部命令、可操作程序或批处理文件。下面是我的服务器代码:

代码语言:javascript
复制
import socket
import sys

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_address = ('', 4242)
sock.bind(server_address)

sock.listen(1)

connection, client_address = sock.accept()
print("Connection established with %s " % str(client_address))
while True:
    command = input("Enter a command: ")
    connection.send(bytes(command, 'UTF-8'))
    confirm = connection.recv(128)
    if confirm == "yes":
        print("[+] Command executed successfully.")
    else:
        print("[-] Command failed to execute!!!")

下面是我的客户端代码:

代码语言:javascript
复制
import socket
import sys
import os

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_address = ('', 42042)
sock.bind(server_address)

sock.connect(('192.168.1.5', 4242))

while True:
    command = str(sock.recv(1024))
    try:
        os.system(command[2:]) # an odd thing, the commands somehow came out prefaced with "b'". Ideas?
        sock.send(bytes("yes", 'UTF-8'))
    except:
        sock.send(bytes("no", 'UTF-8'))

所以,是的,就是这样。事实上,只有一些命令搞砸了,这真的让我很困惑。有谁有什么想法吗?还有,那个"b'“是怎么回事?

EN

回答 1

Stack Overflow用户

发布于 2014-05-28 06:28:59

str(sock.recv(1024))不是将字节对象转换为字符串的方法,您应该使用sock.recv(1024).decode('UTF-8')方法

您可以查看bytes.decode https://docs.python.org/3.4/library/stdtypes.html#bytes.decode的文档

或者这个相关的问题Best way to convert string to bytes in Python 3?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23899808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档