python实现nc
2024-09-05 03:22:24
#!/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
最新文章
- JSP Servlet的区别
- 利用servlet3.0上传,纯原生上传,不依赖任何第三方包
- pickle模块简单使用
- Cpu Gpu 内存 显存 数据流
- 添加数据源,管理工具--数据源(ODBC),点击添加不显示该驱动
- 初学structs2,简单配置
- look
- Android+struts2+JSON方式的手机开发(Login)
- 类型“XXX”的控件“XXXX”必须放在具有 runat=server 的窗体标记内。
- RESTful架构详解(转)
- STM8的GPIO驱动
- Python列表之班荆道故
- 【oracle】dmp导数据库
- 剑指offer(5)
- 008 Spark中standalone模式的HA(了解,知道怎么配置即可)
- Flask web开发之路十
- tcp_协议基础
- TCP长连接保持连接状态TCP keepalive设置
- 【转载】C#之玩转反射
- Chrome浏览器扩展 获取用户密码
热门文章
- unless it is in a subquery contained in a HAVING clause or a select list.
- Android:ART 优化配置(Mstar-6A648)
- React之简介
- 阶段5 3.微服务项目【学成在线】_day08 课程图片管理 分布式文件系统_06-分布式文件系统研究-fastDFS安装及配置文件说明
- centos7安装配置gitlab详细教程
- Kafka管理与监控——broker宕机后无法消费问题
- git clone时加上--depth 1
- 使用 ServiceStack.Text 序列化 json
- 它在 ServiceHost 指令中提供为 Service 特性值,或在配置元素 system.serviceModel/serviceHostingEnvironment/serviceActivations 中提供
- 第二十三章 多项目集中权限管理及分布式会话——《跟我学Shiro》