python 實現 netcat

來源:互聯網
上載者:User

標籤:command   python   listen   import   target   

import sysimport socketimport getoptimport threadingimport subprocesslisten = Falsecommand = Falseupload = Falseexecute = ""target = ""upload_destination = ""port = 0def 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 uponreceiving a connection"    print "-c --command - initialize a command shell"    print "-u --upload=destination - upon receiveing connection upload a file and write to [destination]"    print    print    print "Examples:"    print "bhpnet.py -t 192.168.0.1 -p 5555 -l -c"    print "bhpnet.py -t 192.168.0.1 -p 5555 -l -u=c:\\target.exe"    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","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,"unhanded Option"    if not listen and len(target) and port > 0:        buffer = sys.stdin.read()        client_sender(buffer)    if listen:        server_loop()main()def client_sender(buffer):    client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)    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! Exiting."        client.close()def server_loop():    global target    if not len(target):        target = "0.0.0.0"    server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)    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 outputdef client_handler(client_soket):    global upload    global execute    global command    if len(upload_destination):        file_buffer = ""        while True:            data = client_soket.recv(4096)            if not data:                break            else:                file_buffer += data        try:            file_description = open(upload_destination,"wb")            file_description.write(file_buffer)            file_description.close()            client_soket.send("Successfully saved file to %s\r\n" % upload_destination)        except:            client_soket.send("Failed to save file to %s\r\n" % upload_destination)    if len(execute):        output = run_command(execute)        client_soket.send(output)    if command:        while True:            client_soket("<BHP:#>")            cmd_buffer = ""            while "\n" not in cmd_buffer:                cmd_buffer += client_soket.recv(1024)            response = run_command(cmd_buffer)            client_soket.send(response)


本文出自 “專註php” 部落格,請務必保留此出處http://jingshanls.blog.51cto.com/3357095/1763214

python 實現 netcat

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.