mirror of
https://github.com/bettercap/bettercap
synced 2025-07-05 20:42:09 -07:00
76 lines
1.7 KiB
Go
76 lines
1.7 KiB
Go
package network
|
|
|
|
import (
|
|
"fmt"
|
|
"regexp"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
var (
|
|
pathNameCleaner = regexp.MustCompile("[^a-zA-Z0-9]+")
|
|
)
|
|
|
|
type Station struct {
|
|
*Endpoint
|
|
Frequency int `json:"frequency"`
|
|
Channel int `json:"channel"`
|
|
RSSI int8 `json:"rssi"`
|
|
Sent uint64 `json:"sent"`
|
|
Received uint64 `json:"received"`
|
|
Encryption string `json:"encryption"`
|
|
Cipher string `json:"cipher"`
|
|
Authentication string `json:"authentication"`
|
|
WPS map[string]string `json:"wps"`
|
|
Handshake *Handshake `json:"-"`
|
|
}
|
|
|
|
func cleanESSID(essid string) string {
|
|
res := ""
|
|
for _, c := range essid {
|
|
if strconv.IsPrint(c) {
|
|
res += string(c)
|
|
} else {
|
|
break
|
|
}
|
|
}
|
|
return res
|
|
}
|
|
|
|
func NewStation(essid, bssid string, frequency int, rssi int8) *Station {
|
|
return &Station{
|
|
Endpoint: NewEndpointNoResolve(MonitorModeAddress, bssid, cleanESSID(essid), 0),
|
|
Frequency: frequency,
|
|
Channel: Dot11Freq2Chan(frequency),
|
|
RSSI: rssi,
|
|
WPS: make(map[string]string),
|
|
Handshake: NewHandshake(),
|
|
}
|
|
}
|
|
|
|
func (s Station) BSSID() string {
|
|
return s.HwAddress
|
|
}
|
|
|
|
func (s *Station) ESSID() string {
|
|
return s.Hostname
|
|
}
|
|
|
|
func (s *Station) HasWPS() bool {
|
|
return len(s.WPS) > 0
|
|
}
|
|
|
|
func (s *Station) IsOpen() bool {
|
|
return s.Encryption == "" || s.Encryption == "OPEN"
|
|
}
|
|
|
|
func (s *Station) PathFriendlyName() string {
|
|
name := ""
|
|
bssid := strings.Replace(s.HwAddress, ":", "", -1)
|
|
if essid := pathNameCleaner.ReplaceAllString(s.Hostname, ""); essid != "" {
|
|
name = fmt.Sprintf("%s_%s", essid, bssid)
|
|
} else {
|
|
name = bssid
|
|
}
|
|
return name
|
|
}
|