Advertisement
Guest User

Untitled

a guest
Jun 26th, 2016
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.64 KB | None | 0 0
  1. #!/usr/bin/env python
  2. import sys
  3. import socket
  4. import threading
  5. import subprocess
  6. import argparse
  7.  
  8. parser = argparse.ArgumentParser(description='Send and receive stuff using python sockets (ala netcat)')
  9. parser.add_argument("-l", "--listen", help="enable listener mode (specify -p)", action="store_true")
  10. parser.add_argument("-e", "--execute", help="execute command upon receiving connection", default="")
  11. parser.add_argument("-c", "--command", help="initialize a command shell", action="store_true")
  12. parser.add_argument("-u", "--upload_destination", help="write incoming data to file", default="")
  13. parser.add_argument("-t", "--target", help="target host", default="")
  14. parser.add_argument("-p", "--port", help="target port", type=int, default="")
  15. args = parser.parse_args()
  16.  
  17. def main():
  18. global args
  19.  
  20. # TX or RX?
  21. if not args.listen and len(args.target) and args.port > 0:
  22. buffer = sys.stdin.read()
  23. client_sender(buffer)
  24. if args.listen:
  25. server_loop()
  26.  
  27. def client_sender(buffer):
  28. client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  29.  
  30. try:
  31. client.connect((args.target,args.port))
  32. if len(buffer):
  33. client.send(buffer)
  34. while True:
  35. recv_len = 1
  36. response = ""
  37.  
  38. while recv_len:
  39. data = client.recv(4096)
  40. recv_len = len(data)
  41. response+=data
  42. if recv_len < 4096:
  43. break
  44. print response
  45. buffer = raw_input("")
  46. buffer += "\n"
  47. client.send(buffer)
  48.  
  49. except Exception as e:
  50. #print "[*] Exception: %s" % e
  51. print "[*] Exception! Exited."
  52. client.close()
  53.  
  54. def server_loop():
  55. if not len(args.target):
  56. target="0.0.0.0"
  57. server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  58. server.bind((args.target, args.port))
  59. server.listen(5)
  60.  
  61. while True:
  62. client_socket, addr = server.accept()
  63. client_thread = threading.Thread(target=client_handler,
  64. args=(client_socket,))
  65. client_thread.start()
  66.  
  67. def run_command(command):
  68.  
  69. #trim newline
  70. command = command.rstrip()
  71. try:
  72. output = subprocess.check_output(command,stderr=subprocess.STDOUT, shell=True)
  73. except Exception as e:
  74. print e
  75. output = "Failed to execute command.\r\n"
  76. return output
  77.  
  78. def client_handler(client_socket):
  79. #if 'upload_destination' option is specified, listen for data
  80. if len(args.upload_destination):
  81. file_buffer = ""
  82. while True:
  83. data = client_socket.recv(1024)
  84.  
  85. if not data:
  86. break
  87.  
  88. else:
  89. file_buffer += data
  90.  
  91. #write to file
  92. try:
  93. fd = open(args.upload_destination,"wb")
  94. fd.write(file_buffer)
  95. fd.close()
  96. except Exception as e:
  97. client_socket.send("Failed to save file to %s\r\n" % args.upload_destination)
  98. print "[*] Exception: %s" % e
  99.  
  100. #if 'execute' option specified, execute command
  101. if len(args.execute):
  102. output = run_command(args.execute)
  103. client_socket.send(output)
  104.  
  105. #if 'command' option specified, enter REPL
  106. if args.command:
  107. while True:
  108. client_socket.send("$> ")
  109. cmd_buffer = ""
  110. while "\n" not in cmd_buffer:
  111. cmd_buffer += client_socket.recv(1024)
  112. response = run_command(cmd_buffer)
  113. client_socket.send(response)
  114.  
  115. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement