mirror of
https://github.com/bettercap/bettercap
synced 2025-08-19 13:09:49 -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
|
package network
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/hex"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/evilsocket/islazy/str"
|
||||||
)
|
)
|
||||||
|
|
||||||
type HIDType int
|
type HIDType int
|
||||||
|
@ -51,6 +54,8 @@ type hidDeviceJSON struct {
|
||||||
Type string `json:"type"`
|
Type string `json:"type"`
|
||||||
Address string `json:"address"`
|
Address string `json:"address"`
|
||||||
Channels []string `json:"channels"`
|
Channels []string `json:"channels"`
|
||||||
|
Payloads []string `json:"payloads"`
|
||||||
|
PayloadsSize uint64 `json:"payloads_size"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func NormalizeHIDAddress(address string) string {
|
func NormalizeHIDAddress(address string) string {
|
||||||
|
@ -90,12 +95,27 @@ func NewHIDDevice(address []byte, channel int, payload []byte) *HIDDevice {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dev *HIDDevice) MarshalJSON() ([]byte, error) {
|
func (dev *HIDDevice) MarshalJSON() ([]byte, error) {
|
||||||
|
dev.Lock()
|
||||||
|
defer dev.Unlock()
|
||||||
|
|
||||||
doc := hidDeviceJSON{
|
doc := hidDeviceJSON{
|
||||||
LastSeen: dev.LastSeen,
|
LastSeen: dev.LastSeen,
|
||||||
Type: dev.Type.String(),
|
Type: dev.Type.String(),
|
||||||
Address: dev.Address,
|
Address: dev.Address,
|
||||||
Channels: dev.ChannelsList(),
|
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)
|
return json.Marshal(doc)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -106,10 +126,7 @@ func (dev *HIDDevice) AddChannel(ch int) {
|
||||||
dev.channels[ch] = true
|
dev.channels[ch] = true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dev *HIDDevice) ChannelsList() []string {
|
func (dev *HIDDevice) channelsListUnlocked() []string {
|
||||||
dev.Lock()
|
|
||||||
defer dev.Unlock()
|
|
||||||
|
|
||||||
chans := []string{}
|
chans := []string{}
|
||||||
for ch := range dev.channels {
|
for ch := range dev.channels {
|
||||||
chans = append(chans, fmt.Sprintf("%d", ch))
|
chans = append(chans, fmt.Sprintf("%d", ch))
|
||||||
|
@ -119,6 +136,11 @@ func (dev *HIDDevice) ChannelsList() []string {
|
||||||
|
|
||||||
return chans
|
return chans
|
||||||
}
|
}
|
||||||
|
func (dev *HIDDevice) ChannelsList() []string {
|
||||||
|
dev.Lock()
|
||||||
|
defer dev.Unlock()
|
||||||
|
return dev.channelsListUnlocked()
|
||||||
|
}
|
||||||
|
|
||||||
func (dev *HIDDevice) Channels() string {
|
func (dev *HIDDevice) Channels() string {
|
||||||
return strings.Join(dev.ChannelsList(), ",")
|
return strings.Join(dev.ChannelsList(), ",")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue