session

package
Version: v2.24.2-0...-d0e311e Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 26, 2019 License: GPL-3.0 Imports: 33 Imported by: 159

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

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to