python简易远程控制单线程版

时间:2022-09-16 16:22:45

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

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

2. Tips:

默认IP:127.0.0.1

默认端口:7676

3. 代码样例:

服务端:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/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()

受控端:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#!/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()

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

原文链接:https://blog.csdn.net/PeterZ1997/article/details/78231533