mirror of
https://github.com/bettercap/bettercap
synced 2025-08-14 02:36:57 -07:00
new: hid devices now exports the last 50 sniffed payloads via api.rest
This commit is contained in:
parent
39f9a02c98
commit
6b9b27302e
1 changed files with 34 additions and 12 deletions
|
@ -1,12 +1,15 @@
|
|||
package network
|
||||
|
||||
import (
|
||||
"encoding/hex"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"sort"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/evilsocket/islazy/str"
|
||||
)
|
||||
|
||||
type HIDType int
|
||||
|
@ -47,10 +50,12 @@ type HIDDevice struct {
|
|||
}
|
||||
|
||||
type hidDeviceJSON struct {
|
||||
LastSeen time.Time `json:"last_seen"`
|
||||
Type string `json:"type"`
|
||||
Address string `json:"address"`
|
||||
Channels []string `json:"channels"`
|
||||
LastSeen time.Time `json:"last_seen"`
|
||||
Type string `json:"type"`
|
||||
Address string `json:"address"`
|
||||
Channels []string `json:"channels"`
|
||||
Payloads []string `json:"payloads"`
|
||||
PayloadsSize uint64 `json:"payloads_size"`
|
||||
}
|
||||
|
||||
func NormalizeHIDAddress(address string) string {
|
||||
|
@ -90,12 +95,27 @@ func NewHIDDevice(address []byte, channel int, payload []byte) *HIDDevice {
|
|||
}
|
||||
|
||||
func (dev *HIDDevice) MarshalJSON() ([]byte, error) {
|
||||
dev.Lock()
|
||||
defer dev.Unlock()
|
||||
|
||||
doc := hidDeviceJSON{
|
||||
LastSeen: dev.LastSeen,
|
||||
Type: dev.Type.String(),
|
||||
Address: dev.Address,
|
||||
Channels: dev.ChannelsList(),
|
||||
LastSeen: dev.LastSeen,
|
||||
Type: dev.Type.String(),
|
||||
Address: dev.Address,
|
||||
Channels: dev.channelsListUnlocked(),
|
||||
Payloads: make([]string, 0),
|
||||
PayloadsSize: dev.payloadsSz,
|
||||
}
|
||||
|
||||
// get the latest 50 payloads
|
||||
for i := len(dev.payloads) - 1; i >= 0; i-- {
|
||||
data := str.Trim(hex.Dump(dev.payloads[i]))
|
||||
doc.Payloads = append([]string{data}, doc.Payloads...)
|
||||
if len(doc.Payloads) == 50 {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
return json.Marshal(doc)
|
||||
}
|
||||
|
||||
|
@ -106,10 +126,7 @@ func (dev *HIDDevice) AddChannel(ch int) {
|
|||
dev.channels[ch] = true
|
||||
}
|
||||
|
||||
func (dev *HIDDevice) ChannelsList() []string {
|
||||
dev.Lock()
|
||||
defer dev.Unlock()
|
||||
|
||||
func (dev *HIDDevice) channelsListUnlocked() []string {
|
||||
chans := []string{}
|
||||
for ch := range dev.channels {
|
||||
chans = append(chans, fmt.Sprintf("%d", ch))
|
||||
|
@ -119,6 +136,11 @@ func (dev *HIDDevice) ChannelsList() []string {
|
|||
|
||||
return chans
|
||||
}
|
||||
func (dev *HIDDevice) ChannelsList() []string {
|
||||
dev.Lock()
|
||||
defer dev.Unlock()
|
||||
return dev.channelsListUnlocked()
|
||||
}
|
||||
|
||||
func (dev *HIDDevice) Channels() string {
|
||||
return strings.Join(dev.ChannelsList(), ",")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue