Documentation
¶
Index ¶
- Constants
- Variables
- func IsTargetValid(url string) error
- func ParseTLS(certFile, keyFile string) (tls.Certificate, *x509.CertPool, error)
- type Auth
- type CaptureConfigError
- type CsvConf
- type CsvData
- type EnvCaptureConf
- type EnvironmentNotDefinedError
- type FailedAssertion
- type Hammer
- type RegexCaptureConf
- type RequestError
- type Scenario
- type ScenarioResult
- type ScenarioStep
- type ScenarioStepResult
- type ScenarioValidationError
- type SourceType
- type Tag
- type TimeRunCount
Constants ¶
const ( // Types ErrorProxy = "proxyError" ErrorConn = "connectionError" ErrorUnkown = "unknownError" ErrorIntented = "intentedError" // Errors for created intentionally ErrorDns = "dnsError" ErrorParse = "parseError" ErrorAddr = "addressError" ErrorInvalidRequest = "invalidRequestError" // Reasons ReasonProxyFailed = "proxy connection refused" ReasonProxyTimeout = "proxy timeout" ReasonConnTimeout = "connection timeout" ReasonReadTimeout = "read timeout" ReasonConnRefused = "connection refused" // In gracefully stop, engine cancels the ongoing requests. // We can detect the canceled requests with the help of this. ReasonCtxCanceled = "context canceled" )
Constants for custom error types and reasons
const ( // Constants of the Load Types LoadTypeLinear = "linear" LoadTypeIncremental = "incremental" LoadTypeWaved = "waved" // EngineModes EngineModeDistinctUser = "distinct-user" EngineModeRepeatedUser = "repeated-user" EngineModeDdosify = "ddosify" // Default Values DefaultIterCount = 100 DefaultLoadType = LoadTypeLinear DefaultDuration = 10 DefaultTimeout = 5 DefaultMethod = http.MethodGet DefaultOutputType = "stdout" // TODO: get this value from report.OutputTypeStdout when import cycle resolved. DefaultSamplingCount = 3 )
Constants for Hammer field values
const ( // Constants of the Protocol types ProtocolHTTP = "HTTP" ProtocolHTTPS = "HTTPS" // Constants of the Auth types AuthHttpBasic = "basic" // Should match environment variables, reference EnvironmentVariableRegexStr = `{{[a-zA-Z$][a-zA-Z0-9_().-]*}}` // Should match environment variables, definition, exact match EnvironmentVariableNameStr = `^[a-zA-Z][a-zA-Z0-9_-]*$` )
Constants for Scenario field values
Variables ¶
var SupportedProtocols = [...]string{ProtocolHTTP, ProtocolHTTPS}
SupportedProtocols should be updated whenever a new requester.Requester interface implemented
Functions ¶
func IsTargetValid ¶
Types ¶
type Auth ¶
Auth struct should be able to include all necessary authentication realated data for supportedAuthentications.
type CaptureConfigError ¶
type CaptureConfigError struct {
// contains filtered or unexported fields
}
func (CaptureConfigError) Error ¶
func (sc CaptureConfigError) Error() string
func (CaptureConfigError) Unwrap ¶
func (sc CaptureConfigError) Unwrap() error
type CsvConf ¶
type CsvConf struct {
Path string `json:"path"`
Delimiter string `json:"delimiter"`
SkipFirstLine bool `json:"skip_first_line"`
Vars map[string]Tag `json:"vars"` // "0":"name", "1":"city","2":"team"
SkipEmptyLine bool `json:"skip_empty_line"`
AllowQuota bool `json:"allow_quota"`
Order string `json:"order"`
}
type EnvCaptureConf ¶
type EnvCaptureConf struct {
JsonPath *string `json:"json_path"`
Xpath *string `json:"xpath"`
RegExp *RegexCaptureConf `json:"regexp"`
Name string `json:"as"`
From SourceType `json:"from"`
Key *string `json:"header_key"`
}
type EnvironmentNotDefinedError ¶
type EnvironmentNotDefinedError struct {
// contains filtered or unexported fields
}
func (EnvironmentNotDefinedError) Error ¶
func (sc EnvironmentNotDefinedError) Error() string
func (EnvironmentNotDefinedError) Unwrap ¶
func (sc EnvironmentNotDefinedError) Unwrap() error
type FailedAssertion ¶
type Hammer ¶
type Hammer struct {
// Total iteration count
IterationCount int
// Type of the load.
LoadType string
// Total Duration of the test in seconds.
TestDuration int
// Duration (in second) - Request count map. Example: {10: 1500, 50: 400, ...}
TimeRunCountMap TimeRunCount
// Test Scenario
Scenario Scenario
// Proxy/Proxies to use
Proxy proxy.Proxy
// Destination of the results data.
ReportDestination string
// Dynamic field for extra parameters.
Others map[string]interface{}
// Debug mode on/off
Debug bool
// Sampling rate
SamplingRate int
// Connection reuse
EngineMode string
// Test Data Config
TestDataConf map[string]CsvConf
}
Hammer is like a lighter for the engine. It includes attack metadata and all necessary data to initialize the internal services in the engine.
type RegexCaptureConf ¶
type RequestError ¶
RequestError is our custom error struct created in the requester.Requester implementations.
func (*RequestError) Error ¶
func (e *RequestError) Error() string
Custom error message method of ScenarioError
type Scenario ¶
type Scenario struct {
Steps []ScenarioStep
Envs map[string]interface{}
CsvVars []string // only for validation
Data map[string]CsvData // populated data
}
Scenario struct contains a list of ScenarioStep so scenario.ScenarioService can execute the scenario step by step.
type ScenarioResult ¶
type ScenarioResult struct {
// First request start time for the Scenario
StartTime time.Time
ProxyAddr *url.URL
StepResults []*ScenarioStepResult
// Dynamic field for extra data needs in response object consumers.
Others map[string]interface{}
}
ScenarioResult is corresponding to Scenario. Each Scenario has a ScenarioResult after the scenario is played.
type ScenarioStep ¶
type ScenarioStep struct {
// ID of the Item. Should be given by the client.
ID uint16
// Name of the Item.
Name string
// Request Method
Method string
// Authentication
Auth Auth
// A TLS cert
Cert tls.Certificate
// A TLS cert pool
CertPool *x509.CertPool
// Request Headers
Headers map[string]string
// Request payload
Payload string
// Target URL
URL string
// Connection timeout duration of the request in seconds
Timeout int
// Sleep duration after running the step. Can be a time range like "300-500" or an exact duration like "350" in ms
Sleep string
// Protocol spesific request parameters. For ex: DisableRedirects:true for Http requests
Custom map[string]interface{}
// Envs to capture from response of this step
EnvsToCapture []EnvCaptureConf
// assertion expressions
Assertions []string
}
ScenarioStep represents one step of a Scenario. This struct should be able to include all necessary data in a network packet for SupportedProtocols.
type ScenarioStepResult ¶
type ScenarioStepResult struct {
// ID of the ScenarioStep
StepID uint16
// Name of the ScenarioStep
StepName string
// Each request has a unique ID.
RequestID uuid.UUID
// Returned status code. Has different meaning for different protocols.
StatusCode int
// Time of the request call.
RequestTime time.Time
// Total duration. From request sending to full response receiving.
Duration time.Duration
// Response content length
ContentLength int64
// Error occurred at request time.
Err RequestError
// Url
Url string
// Method
Method string
// Request Headers
ReqHeaders http.Header
// Request Body
ReqBody []byte
// Response Headers
RespHeaders http.Header
// Response Body
RespBody []byte
// Protocol spesific metrics. For ex: DNSLookupDuration: 1s for HTTP
Custom map[string]interface{}
// Usable envs in this step
UsableEnvs map[string]interface{}
// Captured envs in this step
ExtractedEnvs map[string]interface{}
// Failed captures and their reasons
FailedCaptures map[string]string
// Failed assertion rules and received values
FailedAssertions []FailedAssertion
}
ScenarioStepResult is corresponding to ScenarioStep.
type ScenarioValidationError ¶
type ScenarioValidationError struct {
// contains filtered or unexported fields
}
func (ScenarioValidationError) Error ¶
func (sc ScenarioValidationError) Error() string
func (ScenarioValidationError) Unwrap ¶
func (sc ScenarioValidationError) Unwrap() error
type SourceType ¶
type SourceType string
const ( Header SourceType = "header" Body SourceType = "body" )
type TimeRunCount ¶
TimeRunCount is the data structure to store manual load type data.