#!/usr/bin/python2
import sys
import socket
import getopt
import thread
import subprocess listen =False
command =False
upload =False
execute =""
target =""
upload_destination =""
port =0 def usage():
print("hello netcat!")
sys.exit(0) # 作为客户端使用,接受与发送信息
def client_sender():
buffer=""
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
try:
client.connect((target,port))
while True:
recv_len =1
response ="" while recv_len:
data=client.recv(4096)
recv_len=len(data)
response+=data if recv_len < 4096:
break
if "#" in response:
print(response),
buffer = raw_input("")
buffer += "\n"
client.send(buffer)
else:
print(response) except:
print("connection failed!")
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)
print("listening!!!!!")
while True:
try:
client_socket,addr=server.accept()
print("accepting!!!!")
#创建一个新线程处理连接到本服务器的客户端
thread.start_new_thread(client_handler,(client_socket,))
except:
print("thread fail")
break #将客户端传来的信息转换为命令执行,并输出执行结果到output
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 print("goto handler")
#如果客户端传来要上传文件的路径
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")
except:
client_socket.send("failed to save")
#执行一条传来的命令
if len(execute):
output=run_command(execute)
client_socket.send(output) #交互式执行传来的命令,shell面板
if command:
while True:
client_socket.send("<netcat: #> ") cmd_buffer=""
while "\n" not in cmd_buffer:
cmd_buffer+=client_socket.recv(1024) response=run_command(cmd_buffer)
client_socket.send(response) def main():
global listen
global port
global execute
global command
global upload_destination
global target
global opts 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:
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) if not listen and len(target) and port>0: client_sender() if listen:
server_loop()
main()

client客户端:

   client_sender()     发送接受信息

server服务器:

server_loop函数监听并调用新线程执行 client_handler()函数

client_handler()函数中

1.upload_destination client文件传输到server

2.command 包括run_command()函数,将client传来的信息变为命令执行并将其结果保存在output

server发送output到client

最新文章

  1. JSP Servlet的区别
  2. 利用servlet3.0上传,纯原生上传,不依赖任何第三方包
  3. pickle模块简单使用
  4. Cpu Gpu 内存 显存 数据流
  5. 添加数据源,管理工具--数据源(ODBC),点击添加不显示该驱动
  6. 初学structs2,简单配置
  7. look
  8. Android+struts2+JSON方式的手机开发(Login)
  9. 类型“XXX”的控件“XXXX”必须放在具有 runat=server 的窗体标记内。
  10. RESTful架构详解(转)
  11. STM8的GPIO驱动
  12. Python列表之班荆道故
  13. 【oracle】dmp导数据库
  14. 剑指offer(5)
  15. 008 Spark中standalone模式的HA(了解,知道怎么配置即可)
  16. Flask web开发之路十
  17. tcp_协议基础
  18. TCP长连接保持连接状态TCP keepalive设置
  19. 【转载】C#之玩转反射
  20. Chrome浏览器扩展 获取用户密码

热门文章

  1. unless it is in a subquery contained in a HAVING clause or a select list.
  2. Android:ART 优化配置(Mstar-6A648)
  3. React之简介
  4. 阶段5 3.微服务项目【学成在线】_day08 课程图片管理 分布式文件系统_06-分布式文件系统研究-fastDFS安装及配置文件说明
  5. centos7安装配置gitlab详细教程
  6. Kafka管理与监控——broker宕机后无法消费问题
  7. git clone时加上--depth 1
  8. 使用 ServiceStack.Text 序列化 json
  9. 它在 ServiceHost 指令中提供为 Service 特性值,或在配置元素 system.serviceModel/serviceHostingEnvironment/serviceActivations 中提供
  10. 第二十三章 多项目集中权限管理及分布式会话——《跟我学Shiro》