new: new wifi.show.manufacturer parameter to show APs manufacturers (fixes #456)

This commit is contained in:
evilsocket 2019-02-21 14:20:28 +01:00
commit 5944189802
No known key found for this signature in database
GPG key ID: 1564D7F30393A456
2 changed files with 68 additions and 22 deletions

View file

@ -48,6 +48,7 @@ type WiFiModule struct {
assocOpen bool
shakesFile string
apRunning bool
showManuf bool
apConfig packets.Dot11ApConfig
writes *sync.WaitGroup
reads *sync.WaitGroup
@ -72,6 +73,7 @@ func NewWiFiModule(s *session.Session) *WiFiModule {
assocSkip: []net.HardwareAddr{},
assocSilent: false,
assocOpen: false,
showManuf: false,
writes: &sync.WaitGroup{},
reads: &sync.WaitGroup{},
chanLock: &sync.Mutex{},
@ -245,6 +247,10 @@ func NewWiFiModule(s *session.Session) *WiFiModule {
mod.selector = utils.ViewSelectorFor(&mod.SessionModule, "wifi.show",
[]string{"rssi", "bssid", "essid", "channel", "encryption", "clients", "seen", "sent", "rcvd"}, "rssi asc")
mod.AddParam(session.NewBoolParameter("wifi.show.manufacturer",
"false",
"If true, wifi.show will also show the devices manufacturers."))
mod.AddHandler(session.NewModuleHandler("wifi.recon.channel", `wifi\.recon\.channel[\s]+([0-9]+(?:[, ]+[0-9]+)*|clear)`,
"WiFi channels (comma separated) or 'clear' for channel hopping.",
func(args []string) (err error) {

View file

@ -81,14 +81,26 @@ func (mod *WiFiModule) getRow(station *network.Station) ([]string, bool) {
}
if mod.isApSelected() {
return []string{
rssi,
bssid,
strconv.Itoa(station.Channel()),
sent,
recvd,
seen,
}, include
if mod.showManuf {
return []string{
rssi,
bssid,
tui.Dim(station.Vendor),
strconv.Itoa(station.Channel()),
sent,
recvd,
seen,
}, include
} else {
return []string{
rssi,
bssid,
strconv.Itoa(station.Channel()),
sent,
recvd,
seen,
}, include
}
} else {
// this is ugly, but necessary in order to have this
// method handle both access point and clients
@ -117,18 +129,34 @@ func (mod *WiFiModule) getRow(station *network.Station) ([]string, bool) {
wps = tui.Dim(tui.Yellow(wps))
}
return []string{
rssi,
bssid,
ssid,
encryption,
wps,
strconv.Itoa(station.Channel()),
clients,
sent,
recvd,
seen,
}, include
if mod.showManuf {
return []string{
rssi,
bssid,
tui.Dim(station.Vendor),
ssid,
encryption,
wps,
strconv.Itoa(station.Channel()),
clients,
sent,
recvd,
seen,
}, include
} else {
return []string{
rssi,
bssid,
ssid,
encryption,
wps,
strconv.Itoa(station.Channel()),
clients,
sent,
recvd,
seen,
}, include
}
}
}
@ -225,9 +253,17 @@ func (mod *WiFiModule) colNames(nrows int) []string {
columns := []string(nil)
if !mod.isApSelected() {
columns = []string{"RSSI", "BSSID", "SSID", "Encryption", "WPS", "Ch", "Clients", "Sent", "Recvd", "Seen"}
if mod.showManuf {
columns = []string{"RSSI", "BSSID", "Manufacturer", "SSID", "Encryption", "WPS", "Ch", "Clients", "Sent", "Recvd", "Seen"}
} else {
columns = []string{"RSSI", "BSSID", "SSID", "Encryption", "WPS", "Ch", "Clients", "Sent", "Recvd", "Seen"}
}
} else if nrows > 0 {
columns = []string{"RSSI", "BSSID", "Ch", "Sent", "Recvd", "Seen"}
if mod.showManuf {
columns = []string{"RSSI", "BSSID", "Manufacturer", "Ch", "Sent", "Recvd", "Seen"}
} else {
columns = []string{"RSSI", "BSSID", "Ch", "Sent", "Recvd", "Seen"}
}
fmt.Printf("\n%s clients:\n", mod.ap.HwAddress)
} else {
fmt.Printf("\nNo authenticated clients detected for %s.\n", mod.ap.HwAddress)
@ -287,6 +323,10 @@ func (mod *WiFiModule) Show() (err error) {
return
}
if err, mod.showManuf = mod.BoolParam("wifi.show.manufacturer"); err != nil {
return err
}
rows := make([][]string, 0)
for _, s := range stations {
if row, include := mod.getRow(s); include {