我正在开发一个后门程序,用于在我家的PC上进行远程操作。服务器连接正常但我在执行命令时遇到问题,因为字母被分割为每个字母键入的新命令... 类似于我输入'echo'时,结果打印的内容为'e',不会被识别为内部或外部命令,等等等等。 然后来了:'c'不被识别等等。
得到我的观点???
当我输入echo时,如何使这项工作等待完整的命令
以下是代码:
import socket
import subprocess
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((ipadd_of_pc_running_this_appl,12345))
s.listen(3) #ignore this plz..i will change this later
cli,addr=s.accept()
while 1:
data=cli.recv(1024)
if data:
data=data.decode() #string type conversion
proc=subprocess.Popen(data,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
output=proc.stdout.readline()+proc.stderr.readline()
cli.send(output)
顺便说一下,我想用telent或者类似的东西来连接它 提前致谢 抱歉recv_into ...我忘了改变它recv谢谢
注意:问题尚未解决。我复制并粘贴了我的其他文件中的内容[分钟更改;)]。现在编辑代码。请帮助我
答案 0 :(得分:0)
Popen期待一个参数列表,所以试试这个:
Popen([data],
答案 1 :(得分:0)
我可以通过更改
来实现这一目标data=cli.recv_into(1024)
到
data=cli.recv(1024)
recv_into
需要一个缓冲参数,我不知道OP的代码是如何导致失败的。
这是代码
import socket
import subprocess
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(('127.0.0.1',12345))
s.listen(1) #ignore this plz..i will change this later
cli,addr=s.accept()
while 1:
data =cli.recv(1024)
if data:
data=data.decode() #string type conversion
proc=subprocess.Popen(data,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
output=proc.stdout.readline()+proc.stderr.readline()
print(output)
答案 2 :(得分:0)
经过大量的追踪和错误后,我找到了解决方案
第data =cli.recv(1024)
行更改为data =cli.recv(2048)
我不知道为什么但它有效:D