mirror of
https://github.com/bettercap/bettercap
synced 2025-07-16 10:03:39 -07:00
new: HID devices are now exported by the api.rest module
This commit is contained in:
parent
f6649aa82b
commit
e0e1f4e6df
5 changed files with 64 additions and 7 deletions
|
@ -176,6 +176,8 @@ func (mod *RestAPI) Configure() error {
|
||||||
router.HandleFunc("/api/session", mod.sessionRoute)
|
router.HandleFunc("/api/session", mod.sessionRoute)
|
||||||
router.HandleFunc("/api/session/ble", mod.sessionRoute)
|
router.HandleFunc("/api/session/ble", mod.sessionRoute)
|
||||||
router.HandleFunc("/api/session/ble/{mac}", mod.sessionRoute)
|
router.HandleFunc("/api/session/ble/{mac}", mod.sessionRoute)
|
||||||
|
router.HandleFunc("/api/session/hid", mod.sessionRoute)
|
||||||
|
router.HandleFunc("/api/session/hid/{mac}", mod.sessionRoute)
|
||||||
router.HandleFunc("/api/session/env", mod.sessionRoute)
|
router.HandleFunc("/api/session/env", mod.sessionRoute)
|
||||||
router.HandleFunc("/api/session/gateway", mod.sessionRoute)
|
router.HandleFunc("/api/session/gateway", mod.sessionRoute)
|
||||||
router.HandleFunc("/api/session/interface", mod.sessionRoute)
|
router.HandleFunc("/api/session/interface", mod.sessionRoute)
|
||||||
|
|
|
@ -61,7 +61,7 @@ func (mod *RestAPI) showSession(w http.ResponseWriter, r *http.Request) {
|
||||||
mod.toJSON(w, session.I)
|
mod.toJSON(w, session.I)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (mod *RestAPI) showBle(w http.ResponseWriter, r *http.Request) {
|
func (mod *RestAPI) showBLE(w http.ResponseWriter, r *http.Request) {
|
||||||
params := mux.Vars(r)
|
params := mux.Vars(r)
|
||||||
mac := strings.ToLower(params["mac"])
|
mac := strings.ToLower(params["mac"])
|
||||||
|
|
||||||
|
@ -74,6 +74,19 @@ func (mod *RestAPI) showBle(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (mod *RestAPI) showHID(w http.ResponseWriter, r *http.Request) {
|
||||||
|
params := mux.Vars(r)
|
||||||
|
mac := strings.ToLower(params["mac"])
|
||||||
|
|
||||||
|
if mac == "" {
|
||||||
|
mod.toJSON(w, session.I.HID)
|
||||||
|
} else if dev, found := session.I.HID.Get(mac); found {
|
||||||
|
mod.toJSON(w, dev)
|
||||||
|
} else {
|
||||||
|
http.Error(w, "Not Found", 404)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (mod *RestAPI) showEnv(w http.ResponseWriter, r *http.Request) {
|
func (mod *RestAPI) showEnv(w http.ResponseWriter, r *http.Request) {
|
||||||
mod.toJSON(w, session.I.Env)
|
mod.toJSON(w, session.I.Env)
|
||||||
}
|
}
|
||||||
|
@ -90,7 +103,7 @@ func (mod *RestAPI) showModules(w http.ResponseWriter, r *http.Request) {
|
||||||
mod.toJSON(w, session.I.Modules)
|
mod.toJSON(w, session.I.Modules)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (mod *RestAPI) showLan(w http.ResponseWriter, r *http.Request) {
|
func (mod *RestAPI) showLAN(w http.ResponseWriter, r *http.Request) {
|
||||||
params := mux.Vars(r)
|
params := mux.Vars(r)
|
||||||
mac := strings.ToLower(params["mac"])
|
mac := strings.ToLower(params["mac"])
|
||||||
|
|
||||||
|
@ -212,7 +225,7 @@ func (mod *RestAPI) sessionRoute(w http.ResponseWriter, r *http.Request) {
|
||||||
mod.showModules(w, r)
|
mod.showModules(w, r)
|
||||||
|
|
||||||
case strings.HasPrefix(path, "/api/session/lan"):
|
case strings.HasPrefix(path, "/api/session/lan"):
|
||||||
mod.showLan(w, r)
|
mod.showLAN(w, r)
|
||||||
|
|
||||||
case path == "/api/session/options":
|
case path == "/api/session/options":
|
||||||
mod.showOptions(w, r)
|
mod.showOptions(w, r)
|
||||||
|
@ -224,7 +237,10 @@ func (mod *RestAPI) sessionRoute(w http.ResponseWriter, r *http.Request) {
|
||||||
mod.showStartedAt(w, r)
|
mod.showStartedAt(w, r)
|
||||||
|
|
||||||
case strings.HasPrefix(path, "/api/session/ble"):
|
case strings.HasPrefix(path, "/api/session/ble"):
|
||||||
mod.showBle(w, r)
|
mod.showBLE(w, r)
|
||||||
|
|
||||||
|
case strings.HasPrefix(path, "/api/session/hid"):
|
||||||
|
mod.showHID(w, r)
|
||||||
|
|
||||||
case strings.HasPrefix(path, "/api/session/wifi"):
|
case strings.HasPrefix(path, "/api/session/wifi"):
|
||||||
mod.showWiFi(w, r)
|
mod.showWiFi(w, r)
|
||||||
|
|
|
@ -38,7 +38,6 @@ type HIDRecon struct {
|
||||||
/*
|
/*
|
||||||
TODO:
|
TODO:
|
||||||
|
|
||||||
- make session.Session.HID JSON serializable for the API
|
|
||||||
- fix compilation for unsupported platforms
|
- fix compilation for unsupported platforms
|
||||||
- update docs
|
- update docs
|
||||||
- test test test
|
- test test test
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package network
|
package network
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
@ -15,6 +16,10 @@ type HID struct {
|
||||||
lostCb HIDDevLostCallback
|
lostCb HIDDevLostCallback
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type hidJSON struct {
|
||||||
|
Devices []*HIDDevice `json:"devices"`
|
||||||
|
}
|
||||||
|
|
||||||
func NewHID(newcb HIDDevNewCallback, lostcb HIDDevLostCallback) *HID {
|
func NewHID(newcb HIDDevNewCallback, lostcb HIDDevLostCallback) *HID {
|
||||||
return &HID{
|
return &HID{
|
||||||
devices: make(map[string]*HIDDevice),
|
devices: make(map[string]*HIDDevice),
|
||||||
|
@ -23,6 +28,18 @@ func NewHID(newcb HIDDevNewCallback, lostcb HIDDevLostCallback) *HID {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (h *HID) MarshalJSON() ([]byte, error) {
|
||||||
|
doc := hidJSON{
|
||||||
|
Devices: make([]*HIDDevice, 0),
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, dev := range h.devices {
|
||||||
|
doc.Devices = append(doc.Devices, dev)
|
||||||
|
}
|
||||||
|
|
||||||
|
return json.Marshal(doc)
|
||||||
|
}
|
||||||
|
|
||||||
func (b *HID) Get(id string) (dev *HIDDevice, found bool) {
|
func (b *HID) Get(id string) (dev *HIDDevice, found bool) {
|
||||||
b.RLock()
|
b.RLock()
|
||||||
defer b.RUnlock()
|
defer b.RUnlock()
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package network
|
package network
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
@ -45,6 +46,13 @@ type HIDDevice struct {
|
||||||
payloadsSz uint64
|
payloadsSz uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type hidDeviceJSON struct {
|
||||||
|
LastSeen time.Time `json:"last_seen"`
|
||||||
|
Type string `json:"type"`
|
||||||
|
Address string `json:"address"`
|
||||||
|
Channels []string `json:"channels"`
|
||||||
|
}
|
||||||
|
|
||||||
func NormalizeHIDAddress(address string) string {
|
func NormalizeHIDAddress(address string) string {
|
||||||
parts := strings.Split(address, ":")
|
parts := strings.Split(address, ":")
|
||||||
for i, p := range parts {
|
for i, p := range parts {
|
||||||
|
@ -81,6 +89,16 @@ func NewHIDDevice(address []byte, channel int, payload []byte) *HIDDevice {
|
||||||
return dev
|
return dev
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (dev *HIDDevice) MarshalJSON() ([]byte, error) {
|
||||||
|
doc := hidDeviceJSON{
|
||||||
|
LastSeen: dev.LastSeen,
|
||||||
|
Type: dev.Type.String(),
|
||||||
|
Address: dev.Address,
|
||||||
|
Channels: dev.ChannelsList(),
|
||||||
|
}
|
||||||
|
return json.Marshal(doc)
|
||||||
|
}
|
||||||
|
|
||||||
func (dev *HIDDevice) AddChannel(ch int) {
|
func (dev *HIDDevice) AddChannel(ch int) {
|
||||||
dev.Lock()
|
dev.Lock()
|
||||||
defer dev.Unlock()
|
defer dev.Unlock()
|
||||||
|
@ -88,7 +106,7 @@ func (dev *HIDDevice) AddChannel(ch int) {
|
||||||
dev.channels[ch] = true
|
dev.channels[ch] = true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dev *HIDDevice) Channels() string {
|
func (dev *HIDDevice) ChannelsList() []string {
|
||||||
dev.Lock()
|
dev.Lock()
|
||||||
defer dev.Unlock()
|
defer dev.Unlock()
|
||||||
|
|
||||||
|
@ -98,7 +116,12 @@ func (dev *HIDDevice) Channels() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
sort.Strings(chans)
|
sort.Strings(chans)
|
||||||
return strings.Join(chans, ",")
|
|
||||||
|
return chans
|
||||||
|
}
|
||||||
|
|
||||||
|
func (dev *HIDDevice) Channels() string {
|
||||||
|
return strings.Join(dev.ChannelsList(), ",")
|
||||||
}
|
}
|
||||||
|
|
||||||
// credits to https://github.com/insecurityofthings/jackit/tree/master/jackit/plugins
|
// credits to https://github.com/insecurityofthings/jackit/tree/master/jackit/plugins
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue