mirror of
https://github.com/bettercap/bettercap
synced 2025-08-14 02:36:57 -07:00
new: hid.recon, hid.show and hid.sniff
This commit is contained in:
parent
345c1f5d45
commit
c1729ab578
9 changed files with 704 additions and 0 deletions
91
network/hid.go
Normal file
91
network/hid.go
Normal file
|
@ -0,0 +1,91 @@
|
|||
package network
|
||||
|
||||
import (
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
type HIDDevNewCallback func(dev *HIDDevice)
|
||||
type HIDDevLostCallback func(dev *HIDDevice)
|
||||
|
||||
type HID struct {
|
||||
sync.RWMutex
|
||||
devices map[string]*HIDDevice
|
||||
newCb HIDDevNewCallback
|
||||
lostCb HIDDevLostCallback
|
||||
}
|
||||
|
||||
func NewHID(newcb HIDDevNewCallback, lostcb HIDDevLostCallback) *HID {
|
||||
return &HID{
|
||||
devices: make(map[string]*HIDDevice),
|
||||
newCb: newcb,
|
||||
lostCb: lostcb,
|
||||
}
|
||||
}
|
||||
|
||||
func (b *HID) Get(id string) (dev *HIDDevice, found bool) {
|
||||
b.RLock()
|
||||
defer b.RUnlock()
|
||||
dev, found = b.devices[id]
|
||||
return
|
||||
}
|
||||
|
||||
func (b *HID) AddIfNew(address []byte, channel int, payload []byte) (bool, *HIDDevice) {
|
||||
b.Lock()
|
||||
defer b.Unlock()
|
||||
|
||||
id := HIDAddress(address)
|
||||
if dev, found := b.devices[id]; found {
|
||||
dev.LastSeen = time.Now()
|
||||
dev.AddChannel(channel)
|
||||
dev.AddPayload(payload)
|
||||
return false, dev
|
||||
}
|
||||
|
||||
newDev := NewHIDDevice(address, channel, payload)
|
||||
b.devices[id] = newDev
|
||||
|
||||
if b.newCb != nil {
|
||||
b.newCb(newDev)
|
||||
}
|
||||
|
||||
return true, newDev
|
||||
}
|
||||
|
||||
func (b *HID) Remove(id string) {
|
||||
b.Lock()
|
||||
defer b.Unlock()
|
||||
|
||||
if dev, found := b.devices[id]; found {
|
||||
delete(b.devices, id)
|
||||
if b.lostCb != nil {
|
||||
b.lostCb(dev)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (b *HID) Devices() (devices []*HIDDevice) {
|
||||
b.Lock()
|
||||
defer b.Unlock()
|
||||
|
||||
devices = make([]*HIDDevice, 0)
|
||||
for _, dev := range b.devices {
|
||||
devices = append(devices, dev)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (b *HID) EachDevice(cb func(mac string, d *HIDDevice)) {
|
||||
b.Lock()
|
||||
defer b.Unlock()
|
||||
|
||||
for m, dev := range b.devices {
|
||||
cb(m, dev)
|
||||
}
|
||||
}
|
||||
|
||||
func (b *HID) Clear() {
|
||||
b.Lock()
|
||||
defer b.Unlock()
|
||||
b.devices = make(map[string]*HIDDevice)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue