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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Python实现多线程抓取网页功能实例详解

    本文实例讲述了Python实现多线程抓取网页功能.分享给大家供大家参考,具体如下: 最近,一直在做网络爬虫相关的东西. 看了一下开源C++写的larbin爬虫,仔细阅读了里面的设计思想和一些关键技术的实现. 1.larbin的URL去重用的很高效的bloom filter算法: 2.DNS处理,使用的adns异步的开源组件: 3.对于url队列的处理,则是用部分缓存到内存,部分写入文件的策略. 4.larbin对文件的相关操作做了很多工作 5.在larbin里有连接池,通过创建套接字,向目标站点

  • Python实现基于多线程、多用户的FTP服务器与客户端功能完整实例

    本文实例讲述了Python实现基于多线程.多用户的FTP服务器与客户端功能.分享给大家供大家参考,具体如下: 项目介绍: 1. 用户加密认证 2. 允许同时多用户登录 3. 每个用户有自己的家目录 ,且只能访问自己的家目录 4. 对用户进行磁盘配额,每个用户的可用空间不同 5. 允许用户在ftp server上随意切换目录 6. 允许用户查看当前目录下文件 7. 允许上传和下载文件,保证文件一致性 8. 文件传输过程中显示进度条 实现的原理: 服务器端启用端口监听,并对每一连接启用一个线程,对用

  • python单线程实现多个定时器示例

    单线程实现多个定时器 NewTimer.py 复制代码 代码如下: #!/usr/bin/env python from heapq import *from threading import Timerimport threadingimport uuidimport timeimport datetimeimport sysimport math global TimerStampglobal TimerTimes class CancelFail(Exception):    pass c

  • python简单线程和协程学习心得(分享)

    python中对线程的支持的确不够,不过据说python有足够完备的异步网络框架模块,希望日后能学习到,这里就简单的对python中的线程做个总结 threading库可用来在单独的线程中执行任意的python可调用对象.尽管此模块对线程相关操作的支持不够,但是我们还是能够用简单的线程来处理I/O操作,以减低程序响应时间. from threading import Thread import time def countdown(n): while n > 0: print('T-minus:

  • Python多线程实现同步的四种方式

    临界资源即那些一次只能被一个线程访问的资源,典型例子就是打印机,它一次只能被一个程序用来执行打印功能,因为不能多个线程同时操作,而访问这部分资源的代码通常称之为临界区. 锁机制 threading的Lock类,用该类的acquire函数进行加锁,用realease函数进行解锁 import threading import time class Num: def __init__(self): self.num = 0 self.lock = threading.Lock() def add(s

  • python实现单线程多任务非阻塞TCP服务端

    本文实例为大家分享了python实现单线程多任务非阻塞TCP服务端的具体代码,供大家参考,具体内容如下 # coding:utf-8 from socket import * # 1.创建服务器socket sock = socket(AF_INET, SOCK_STREAM) # 2.绑定主机和端口 addr = ('', 7788) # sock.bind(addr) # 3. 设置最大监听数目,并发 sock.listen(10) # 4. 设置成非阻塞 sock.setblocking(

  • python多进程和多线程究竟谁更快(详解)

    python3.6 threading和multiprocessing 四核+三星250G-850-SSD 自从用多进程和多线程进行编程,一致没搞懂到底谁更快.网上很多都说python多进程更快,因为GIL(全局解释器锁).但是我在写代码的时候,测试时间却是多线程更快,所以这到底是怎么回事?最近再做分词工作,原来的代码速度太慢,想提速,所以来探求一下有效方法(文末有代码和效果图) 这里先来一张程序的结果图,说明线程和进程谁更快 一些定义 并行是指两个或者多个事件在同一时刻发生.并发是指两个或多个

  • Python 爬虫学习笔记之单线程爬虫

    介绍 本篇文章主要介绍如何爬取麦子学院的课程信息(本爬虫仍是单线程爬虫),在开始介绍之前,先来看看结果示意图 怎么样,是不是已经跃跃欲试了?首先让我们打开麦子学院的网址,然后找到麦子学院的全部课程信息,像下面这样 这个时候进行翻页,观看网址的变化,首先,第一页的网址是 http://www.maiziedu.com/course/list/, 第二页变成了 http://www.maiziedu.com/course/list/all-all/0-2/, 第三页变成了 http://www.ma

  • Python中单线程、多线程和多进程的效率对比实验实例

    python的多进程性能要明显优于多线程,因为cpython的GIL对性能做了约束. Python是运行在解释器中的语言,查找资料知道,python中有一个全局锁(GIL),在使用多进程(Thread)的情况下,不能发挥多核的优势.而使用多进程(Multiprocess),则可以发挥多核的优势真正地提高效率. 对比实验 资料显示,如果多线程的进程是CPU密集型的,那多线程并不能有多少效率上的提升,相反还可能会因为线程的频繁切换,导致效率下降,推荐使用多进程:如果是IO密集型,多线程进程可以利用I

  • python多线程socket编程之多客户端接入

    Python中实现socket通信的服务端比较复杂,而客户端非常简单,所以客户端基本上都是用sockct模块实现,而服务 端用有很多模块可以使用,如下: 1.客户端 #!/usr/bin/env python #coding:utf-8 ''' file:client.py date:9/9/17 3:43 PM author:lockey email:lockey@123.com desc:socket编程客户端,python3.6.2 ''' import socket,sys HOST =

随机推荐