Documentation

Overview

    Package session contains code to manage the interactive session, modules, environment, etc.

    Index

    Constants

    View Source
    const (
    	IPv4Validator = `^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$`
    	IPv6Validator = `^[:a-fA-F0-9]{6,}$`
    )
    View Source
    const (
    	STRING ParamType = iota
    	BOOL             = iota
    	INT              = iota
    	FLOAT            = iota
    )
    View Source
    const (
    	PromptVariable       = "$"
    	DefaultPrompt        = "{by}{fw}{cidr} {fb}> {env.iface.ipv4} {reset} {bold}» {reset}"
    	DefaultPromptMonitor = "{by}{fb} {env.iface.name} {reset} {bold}» {reset}"
    )
    View Source
    const AliasesFile = "~/bettercap.aliases"
    View Source
    const (
    	HistoryFile = "~/bettercap.history"
    )
    View Source
    const ParamIfaceAddress = "<interface address>"
    View Source
    const ParamIfaceAddress6 = "<interface address6>"
    View Source
    const ParamIfaceName = "<interface name>"
    View Source
    const ParamRandomMAC = "<random mac>"
    View Source
    const ParamSubnet = "<entire subnet>"

    Variables

    View Source
    var (
    	I = (*Session)(nil)
    
    	ErrNotSupported = errors.New("this component is not supported on this OS")
    )
    View Source
    var (
    	ErrEmptyExpression = errors.New("expression can not be empty")
    )
    View Source
    var (
    	PromptCallbacks = map[string]func(s *Session) string{
    		"{cidr}": func(s *Session) string {
    			return s.Interface.CIDR()
    		},
    		"{net.sent}": func(s *Session) string {
    			return fmt.Sprintf("%d", s.Queue.Stats.Sent)
    		},
    		"{net.sent.human}": func(s *Session) string {
    			return humanize.Bytes(s.Queue.Stats.Sent)
    		},
    		"{net.received}": func(s *Session) string {
    			return fmt.Sprintf("%d", s.Queue.Stats.Received)
    		},
    		"{net.received.human}": func(s *Session) string {
    			return humanize.Bytes(s.Queue.Stats.Received)
    		},
    		"{net.packets}": func(s *Session) string {
    			return fmt.Sprintf("%d", s.Queue.Stats.PktReceived)
    		},
    		"{net.errors}": func(s *Session) string {
    			return fmt.Sprintf("%d", s.Queue.Stats.Errors)
    		},
    	}
    )

    Functions

    func AsTag

    func AsTag(name string) string

    func ErrAlreadyStarted

    func ErrAlreadyStarted(name string) error

    func ErrAlreadyStopped

    func ErrAlreadyStopped(name string) error

    func ParseCommands

    func ParseCommands(line string) []string

    Types

    type CommandHandler

    type CommandHandler struct {
    	sync.Mutex
    	Name        string
    	Description string
    	Completer   *readline.PrefixCompleter
    	Parser      *regexp.Regexp
    	// contains filtered or unexported fields
    }

    func NewCommandHandler

    func NewCommandHandler(name string, expr string, desc string, exec func(args []string, s *Session) error) CommandHandler

    func (*CommandHandler) Exec

    func (h *CommandHandler) Exec(args []string, s *Session) error

    func (*CommandHandler) Parse

    func (h *CommandHandler) Parse(line string) (bool, []string)

    type Environment

    type Environment struct {
    	sync.Mutex
    	Data map[string]string `json:"data"`
    	// contains filtered or unexported fields
    }

    func NewEnvironment

    func NewEnvironment(envFile string) (*Environment, error)

    func (*Environment) Get

    func (env *Environment) Get(name string) (bool, string)

    func (*Environment) GetInt

    func (env *Environment) GetInt(name string) (error, int)

    func (*Environment) GetUnlocked

    func (env *Environment) GetUnlocked(name string) (bool, string)

    func (*Environment) Has

    func (env *Environment) Has(name string) bool

    func (*Environment) Load

    func (env *Environment) Load(fileName string) error

    func (*Environment) Save

    func (env *Environment) Save(fileName string) error

    func (*Environment) Set

    func (env *Environment) Set(name, value string) string

    func (*Environment) Sorted

    func (env *Environment) Sorted() []string

    func (*Environment) WithCallback

    func (env *Environment) WithCallback(name, value string, cb EnvironmentChangedCallback) string

    type EnvironmentChangedCallback

    type EnvironmentChangedCallback func(newValue string)

    type Event

    type Event struct {
    	Tag  string      `json:"tag"`
    	Time time.Time   `json:"time"`
    	Data interface{} `json:"data"`
    }

    func NewEvent

    func NewEvent(tag string, data interface{}) Event

    func (Event) Label

    func (e Event) Label() string

    type EventPool

    type EventPool struct {
    	sync.Mutex
    	// contains filtered or unexported fields
    }

    func NewEventPool

    func NewEventPool(debug bool, silent bool) *EventPool

    func (*EventPool) Add

    func (p *EventPool) Add(tag string, data interface{})

    func (*EventPool) Clear

    func (p *EventPool) Clear()

    func (*EventPool) Listen

    func (p *EventPool) Listen() <-chan Event

    func (*EventPool) Log

    func (p *EventPool) Log(level log.Verbosity, format string, args ...interface{})

    func (*EventPool) SetDebug

    func (p *EventPool) SetDebug(d bool)

    func (*EventPool) SetSilent

    func (p *EventPool) SetSilent(s bool)

    func (*EventPool) Sorted

    func (p *EventPool) Sorted() []Event

    func (*EventPool) Unlisten

    func (p *EventPool) Unlisten(listener <-chan Event)

    type EventsIgnoreList

    type EventsIgnoreList struct {
    	sync.RWMutex
    	// contains filtered or unexported fields
    }

    func NewEventsIgnoreList

    func NewEventsIgnoreList() *EventsIgnoreList

    func (*EventsIgnoreList) Add

    func (l *EventsIgnoreList) Add(expr string) (err error)

    func (*EventsIgnoreList) Clear

    func (l *EventsIgnoreList) Clear()

    func (*EventsIgnoreList) Empty

    func (l *EventsIgnoreList) Empty() bool

    func (*EventsIgnoreList) Filters

    func (l *EventsIgnoreList) Filters() []filter

    func (*EventsIgnoreList) Ignored

    func (l *EventsIgnoreList) Ignored(e Event) bool

    func (*EventsIgnoreList) MarshalJSON

    func (l *EventsIgnoreList) MarshalJSON() ([]byte, error)

    func (*EventsIgnoreList) Remove

    func (l *EventsIgnoreList) Remove(expr string) (err error)

    type GPS

    type GPS struct {
    	Updated       time.Time
    	Latitude      float64 // Latitude.
    	Longitude     float64 // Longitude.
    	FixQuality    string  // Quality of fix.
    	NumSatellites int64   // Number of satellites in use.
    	HDOP          float64 // Horizontal dilution of precision.
    	Altitude      float64 // Altitude.
    	Separation    float64 // Geoidal separation
    }

    type JSONModuleHandler

    type JSONModuleHandler struct {
    	Name        string `json:"name"`
    	Description string `json:"description"`
    	Parser      string `json:"parser"`
    }

    type JSONModuleParam

    type JSONModuleParam struct {
    	Name        string    `json:"name"`
    	Type        ParamType `json:"type"`
    	Description string    `json:"description"`
    	Value       string    `json:"default_value"`
    	Current     string    `json:"current_value"`
    	Validator   string    `json:"validator"`
    }

    type LogMessage

    type LogMessage struct {
    	Level   log.Verbosity
    	Message string
    }

    type Module

    type Module interface {
    	Name() string
    	Description() string
    	Author() string
    	Handlers() []ModuleHandler
    	Parameters() map[string]*ModuleParam
    
    	Extra() map[string]interface{}
    	Required() []string
    	Running() bool
    	Start() error
    	Stop() error
    }

    type ModuleHandler

    type ModuleHandler struct {
    	sync.Mutex
    
    	Name        string
    	Description string
    	Parser      *regexp.Regexp
    	Completer   *readline.PrefixCompleter
    	// contains filtered or unexported fields
    }

    func NewModuleHandler

    func NewModuleHandler(name string, expr string, desc string, exec func(args []string) error) ModuleHandler

    func (*ModuleHandler) Complete

    func (h *ModuleHandler) Complete(name string, cb func(prefix string) []string)

    func (*ModuleHandler) Exec

    func (h *ModuleHandler) Exec(args []string) error

    func (*ModuleHandler) Help

    func (h *ModuleHandler) Help(padding int) string

    func (ModuleHandler) MarshalJSON

    func (h ModuleHandler) MarshalJSON() ([]byte, error)

    func (*ModuleHandler) Parse

    func (h *ModuleHandler) Parse(line string) (bool, []string)

    type ModuleList

    type ModuleList []Module

    func (ModuleList) MarshalJSON

    func (mm ModuleList) MarshalJSON() ([]byte, error)

    type ModuleParam

    type ModuleParam struct {
    	Name        string
    	Type        ParamType
    	Value       string
    	Description string
    
    	Validator *regexp.Regexp
    }

    func NewBoolParameter

    func NewBoolParameter(name string, def_value string, desc string) *ModuleParam

    func NewDecimalParameter

    func NewDecimalParameter(name string, def_value string, desc string) *ModuleParam

    func NewIntParameter

    func NewIntParameter(name string, def_value string, desc string) *ModuleParam

    func NewModuleParameter

    func NewModuleParameter(name string, def_value string, t ParamType, validator string, desc string) *ModuleParam

    func NewStringParameter

    func NewStringParameter(name string, def_value string, validator string, desc string) *ModuleParam

    func (ModuleParam) Get

    func (p ModuleParam) Get(s *Session) (error, interface{})

    func (ModuleParam) Help

    func (p ModuleParam) Help(padding int) string

    func (ModuleParam) MarshalJSON

    func (p ModuleParam) MarshalJSON() ([]byte, error)

    func (ModuleParam) Register

    func (p ModuleParam) Register(s *Session)

    func (ModuleParam) RegisterObserver

    func (p ModuleParam) RegisterObserver(s *Session, cb EnvironmentChangedCallback)

    type ParamType

    type ParamType int

    type Prompt

    type Prompt struct {
    }

    func NewPrompt

    func NewPrompt() Prompt

    func (Prompt) Render

    func (p Prompt) Render(s *Session) string

    type Session

    type Session struct {
    	Options   core.Options
    	Interface *network.Endpoint
    	Gateway   *network.Endpoint
    	Env       *Environment
    	Lan       *network.LAN
    	WiFi      *network.WiFi
    	BLE       *network.BLE
    	HID       *network.HID
    	Queue     *packets.Queue
    	StartedAt time.Time
    	Active    bool
    	GPS       GPS
    	Modules   ModuleList
    	Aliases   *data.UnsortedKV
    
    	Input            *readline.Instance
    	Prompt           Prompt
    	CoreHandlers     []CommandHandler
    	Events           *EventPool
    	EventsIgnoreList *EventsIgnoreList
    	UnkCmdCallback   UnknownCommandCallback
    	Firewall         firewall.FirewallManager
    }

    func New

    func New() (*Session, error)

    func (*Session) BLECompleter

    func (s *Session) BLECompleter(prefix string) []string

    func (*Session) Close

    func (s *Session) Close()

    func (*Session) EventsCompleter

    func (s *Session) EventsCompleter(prefix string) []string

    func (*Session) FindMAC

    func (s *Session) FindMAC(ip net.IP, probe bool) (net.HardwareAddr, error)

    func (*Session) HIDCompleter

    func (s *Session) HIDCompleter(prefix string) []string

    func (*Session) IsOn

    func (s *Session) IsOn(moduleName string) bool

    func (*Session) LANCompleter

    func (s *Session) LANCompleter(prefix string) []string

    func (*Session) Lock

    func (s *Session) Lock()

    func (*Session) MarshalJSON

    func (s *Session) MarshalJSON() ([]byte, error)

    func (*Session) Module

    func (s *Session) Module(name string) (err error, mod Module)

    func (*Session) ReadLine

    func (s *Session) ReadLine() (string, error)

    func (*Session) Refresh

    func (s *Session) Refresh()

    func (*Session) Register

    func (s *Session) Register(mod Module) error

    func (*Session) Run

    func (s *Session) Run(line string) error

    func (*Session) RunCaplet

    func (s *Session) RunCaplet(filename string) error

    func (*Session) Skip

    func (s *Session) Skip(ip net.IP) bool

    func (*Session) Start

    func (s *Session) Start() error

    func (*Session) Unlock

    func (s *Session) Unlock()

    func (*Session) WiFiCompleter

    func (s *Session) WiFiCompleter(prefix string) []string

    func (*Session) WiFiCompleterFull

    func (s *Session) WiFiCompleterFull(prefix string) []string

    type SessionJSON

    type SessionJSON struct {
    	Version    string            `json:"version"`
    	OS         string            `json:"os"`
    	Arch       string            `json:"arch"`
    	GoVersion  string            `json:"goversion"`
    	Resources  resourcesJSON     `json:"resources"`
    	Interfaces []ifaceJSON       `json:"interfaces"`
    	Options    core.Options      `json:"options"`
    	Interface  *network.Endpoint `json:"interface"`
    	Gateway    *network.Endpoint `json:"gateway"`
    	Env        *Environment      `json:"env"`
    	Lan        *network.LAN      `json:"lan"`
    	WiFi       *network.WiFi     `json:"wifi"`
    	BLE        *network.BLE      `json:"ble"`
    	HID        *network.HID      `json:"hid"`
    	Queue      *packets.Queue    `json:"packets"`
    	StartedAt  time.Time         `json:"started_at"`
    	PolledAt   time.Time         `json:"polled_at"`
    	Active     bool              `json:"active"`
    	GPS        GPS               `json:"gps"`
    	Modules    ModuleList        `json:"modules"`
    	Caplets    []*caplets.Caplet `json:"caplets"`
    }

    type SessionModule

    type SessionModule struct {
    	Name       string
    	Session    *Session
    	Started    bool
    	StatusLock *sync.RWMutex
    	State      *sync.Map
    	// contains filtered or unexported fields
    }

    func NewSessionModule

    func NewSessionModule(name string, s *Session) SessionModule

    func (*SessionModule) AddHandler

    func (m *SessionModule) AddHandler(h ModuleHandler)

    func (*SessionModule) AddObservableParam

    func (m *SessionModule) AddObservableParam(p *ModuleParam, cb EnvironmentChangedCallback) *ModuleParam

    func (*SessionModule) AddParam

    func (m *SessionModule) AddParam(p *ModuleParam) *ModuleParam

    func (SessionModule) BoolParam

    func (m SessionModule) BoolParam(name string) (error, bool)

    func (*SessionModule) Debug

    func (m *SessionModule) Debug(format string, args ...interface{})

    func (SessionModule) DecParam

    func (m SessionModule) DecParam(name string) (error, float64)

    func (*SessionModule) Error

    func (m *SessionModule) Error(format string, args ...interface{})

    func (*SessionModule) Extra

    func (m *SessionModule) Extra() map[string]interface{}

    func (*SessionModule) Fatal

    func (m *SessionModule) Fatal(format string, args ...interface{})

    func (*SessionModule) Handlers

    func (m *SessionModule) Handlers() []ModuleHandler

    func (SessionModule) IPParam

    func (m SessionModule) IPParam(name string) (error, net.IP)

    func (*SessionModule) Info

    func (m *SessionModule) Info(format string, args ...interface{})

    func (*SessionModule) InitState

    func (m *SessionModule) InitState(keys ...string)

    func (SessionModule) IntParam

    func (m SessionModule) IntParam(name string) (error, int)

    func (SessionModule) ListParam

    func (m SessionModule) ListParam(name string) (err error, values []string)

    func (*SessionModule) Param

    func (m *SessionModule) Param(name string) *ModuleParam

    func (*SessionModule) Parameters

    func (m *SessionModule) Parameters() map[string]*ModuleParam

    func (*SessionModule) Required

    func (m *SessionModule) Required() []string

    func (*SessionModule) Requires

    func (m *SessionModule) Requires(modName string)

    func (*SessionModule) ResetState

    func (m *SessionModule) ResetState()

    func (*SessionModule) Running

    func (m *SessionModule) Running() bool

    func (*SessionModule) SetRunning

    func (m *SessionModule) SetRunning(running bool, cb func()) error

    func (SessionModule) StringParam

    func (m SessionModule) StringParam(name string) (error, string)

    func (*SessionModule) Warning

    func (m *SessionModule) Warning(format string, args ...interface{})

    type UnknownCommandCallback

    type UnknownCommandCallback func(cmd string) bool