packet

package
v0.2.5 Latest Latest
Warning

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

Go to latest
Published: May 22, 2019 License: AGPL-3.0 Imports: 6 Imported by: 0

Documentation

Index

Constants

View Source
const (
	IPv4 = IPVersion(4)
	IPv6 = IPVersion(6)

	InBound  = true
	OutBound = false

	Local  = true
	Remote = false

	// convenience
	IGMP   = IPProtocol(2)
	RAW    = IPProtocol(255)
	TCP    = IPProtocol(6)
	UDP    = IPProtocol(17)
	ICMP   = IPProtocol(1)
	ICMPv6 = IPProtocol(58)
)

Variables

View Source
var (
	ErrFailedToLoadPayload = errors.New("could not load packet payload")
)

Functions

func Parse added in v0.2.5

func Parse(packetData []byte, packet *Base) error

Parse parses an IP packet and saves the information in the given packet object.

Types

type Base added in v0.2.5

type Base struct {
	Payload []byte
	// contains filtered or unexported fields
}

Base is a base structure for satisfying the Packet interface.

func (*Base) Ctx added in v0.2.5

func (pkt *Base) Ctx() context.Context

Ctx returns the packet context.

func (*Base) FmtPacket added in v0.2.5

func (pkt *Base) FmtPacket() string

FmtPacket returns the most important information about the packet as a string

func (*Base) FmtProtocol added in v0.2.5

func (pkt *Base) FmtProtocol() string

FmtProtocol returns the protocol as a string

func (*Base) FmtRemoteAddress added in v0.2.5

func (pkt *Base) FmtRemoteAddress() string

FmtRemoteAddress returns the full remote address (protocol, IP, port) as a string

func (*Base) FmtRemoteIP added in v0.2.5

func (pkt *Base) FmtRemoteIP() string

FmtRemoteIP returns the remote IP address as a string

func (*Base) FmtRemotePort added in v0.2.5

func (pkt *Base) FmtRemotePort() string

FmtRemotePort returns the remote port as a string

func (*Base) GetLinkID added in v0.2.5

func (pkt *Base) GetLinkID() string

GetLinkID returns the link ID for this packet.

func (*Base) GetPayload added in v0.2.5

func (pkt *Base) GetPayload() ([]byte, error)

GetPayload returns the packet payload. In some cases, this will fetch the payload from the os integration system.

func (*Base) HasPorts added in v0.2.5

func (pkt *Base) HasPorts() bool

HasPorts checks if the packet has a protocol that uses ports.

func (*Base) Info added in v0.2.5

func (pkt *Base) Info() *Info

Info returns the packet Info.

func (*Base) IsInbound added in v0.2.5

func (pkt *Base) IsInbound() bool

IsInbound checks if the packet is inbound.

func (*Base) IsOutbound added in v0.2.5

func (pkt *Base) IsOutbound() bool

IsOutbound checks if the packet is outbound.

func (*Base) MatchesAddress added in v0.2.5

func (pkt *Base) MatchesAddress(remote bool, protocol IPProtocol, network *net.IPNet, port uint16) bool

MatchesAddress checks if a the packet matches a given endpoint (remote or local) in protocol, network and port.

Comparison matrix:

IN   OUT

Local Dst Src Remote Src Dst

func (*Base) MatchesIP added in v0.2.5

func (pkt *Base) MatchesIP(endpoint bool, network *net.IPNet) bool

MatchesIP checks if a the packet matches a given endpoint (remote or local) IP.

Comparison matrix:

IN   OUT

Local Dst Src Remote Src Dst

func (*Base) SetCtx added in v0.2.5

func (pkt *Base) SetCtx(ctx context.Context)

SetCtx sets the packet context.

func (*Base) SetInbound added in v0.2.5

func (pkt *Base) SetInbound()

SetInbound sets a the packet direction to inbound. This must only used when initializing the packet structure.

func (*Base) SetOutbound added in v0.2.5

func (pkt *Base) SetOutbound()

SetOutbound sets a the packet direction to outbound. This must only used when initializing the packet structure.

func (*Base) SetPacketInfo added in v0.2.5

func (pkt *Base) SetPacketInfo(packetInfo Info)

SetPacketInfo sets a new packet Info. This must only used when initializing the packet structure.

func (*Base) String added in v0.2.5

func (pkt *Base) String() string

type Endpoint

type Endpoint bool

type IPProtocol

type IPProtocol uint8

func (IPProtocol) String

func (p IPProtocol) String() string

type IPVersion

type IPVersion uint8

func (IPVersion) ByteSize

func (v IPVersion) ByteSize() int

Returns the byte size of the ip, IPv4 = 4 bytes, IPv6 = 16

func (IPVersion) String

func (v IPVersion) String() string

type Info added in v0.2.5

type Info struct {
	Direction bool
	InTunnel  bool

	Version          IPVersion
	Src, Dst         net.IP
	Protocol         IPProtocol
	SrcPort, DstPort uint16
}

Info holds IP and TCP/UDP header information

func (*Info) LocalIP added in v0.2.5

func (pi *Info) LocalIP() net.IP

LocalIP returns the local IP of the packet.

func (*Info) LocalPort added in v0.2.5

func (pi *Info) LocalPort() uint16

LocalPort returns the local port of the packet.

func (*Info) RemoteIP added in v0.2.5

func (pi *Info) RemoteIP() net.IP

RemoteIP returns the remote IP of the packet.

func (*Info) RemotePort added in v0.2.5

func (pi *Info) RemotePort() uint16

RemotePort returns the remote port of the packet.

type Packet

type Packet interface {
	// VERDICTS
	Accept() error
	Block() error
	Drop() error
	PermanentAccept() error
	PermanentBlock() error
	PermanentDrop() error
	RerouteToNameserver() error
	RerouteToTunnel() error

	// INFO
	SetCtx(context.Context)
	Ctx() context.Context
	Info() *Info
	SetPacketInfo(Info)
	IsInbound() bool
	IsOutbound() bool
	SetInbound()
	SetOutbound()
	HasPorts() bool
	GetPayload() ([]byte, error)
	GetLinkID() string

	// MATCHING
	MatchesAddress(bool, IPProtocol, *net.IPNet, uint16) bool
	MatchesIP(bool, *net.IPNet) bool

	// FORMATTING
	String() string
	FmtPacket() string
	FmtProtocol() string
	FmtRemoteIP() string
	FmtRemotePort() string
	FmtRemoteAddress() string
}

Packet is an interface to a network packet to provide object behaviour the same across all systems

type Verdict

type Verdict uint8
const (
	DROP Verdict = iota
	BLOCK
	ACCEPT
	STOLEN
	QUEUE
	REPEAT
	STOP
)

func (Verdict) String

func (v Verdict) String() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL