mirror of
https://github.com/bettercap/bettercap
synced 2025-07-06 04:52:10 -07:00
59 lines
1.4 KiB
Go
59 lines
1.4 KiB
Go
package network
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
"regexp"
|
|
"strconv"
|
|
|
|
"github.com/bettercap/bettercap/core"
|
|
|
|
"github.com/evilsocket/islazy/str"
|
|
)
|
|
|
|
const airPortPath = "/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport"
|
|
|
|
var WiFiChannelParser = regexp.MustCompile(`(?m)^.*Supported Channels: (.*)$`)
|
|
|
|
// see Windows version to understand why ....
|
|
func getInterfaceName(iface net.Interface) string {
|
|
return iface.Name
|
|
}
|
|
|
|
func SetInterfaceChannel(iface string, channel int) error {
|
|
curr := GetInterfaceChannel(iface)
|
|
// the interface is already on this channel
|
|
if curr == channel {
|
|
return nil
|
|
}
|
|
|
|
_, err := core.Exec(airPortPath, []string{iface, fmt.Sprintf("-c%d", channel)})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
SetInterfaceCurrentChannel(iface, channel)
|
|
return nil
|
|
}
|
|
|
|
func getFrequenciesFromChannels(output string) ([]int, error) {
|
|
freqs := make([]int, 0)
|
|
if output != "" {
|
|
if matches := WiFiChannelParser.FindStringSubmatch(output); len(matches) == 2 {
|
|
for _, channel := range str.Comma(matches[1]) {
|
|
if channel, err := strconv.Atoi(channel); err == nil {
|
|
freqs = append(freqs, Dot11Chan2Freq(channel))
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return freqs, nil
|
|
}
|
|
|
|
func GetSupportedFrequencies(iface string) ([]int, error) {
|
|
out, err := core.Exec("system_profiler", []string{"SPAirPortDataType"})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return getFrequenciesFromChannels(out)
|
|
}
|