Back to godoc.org

Package packet

v0.4.17
Latest Go to latest
Published: Jul 24, 2020 | License: AGPL-3.0 | Module: github.com/safing/portmaster

Index

Package Files

Constants

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

	InBound  = true
	OutBound = false

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

Basic Constants

Variables

var (
	// ErrFailedToLoadPayload is returned by GetPayload if it failed for an unspecified reason, or is not implemented on the current system.
	ErrFailedToLoadPayload = errors.New("could not load packet payload")
)

func Parse

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

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

type Base

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

Base is a base structure for satisfying the Packet interface.

func (*Base) Ctx

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

Ctx returns the packet context.

func (*Base) FmtPacket

func (pkt *Base) FmtPacket() string

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

func (*Base) FmtProtocol

func (pkt *Base) FmtProtocol() string

FmtProtocol returns the protocol as a string

func (*Base) FmtRemoteAddress

func (pkt *Base) FmtRemoteAddress() string

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

func (*Base) FmtRemoteIP

func (pkt *Base) FmtRemoteIP() string

FmtRemoteIP returns the remote IP address as a string

func (*Base) FmtRemotePort

func (pkt *Base) FmtRemotePort() string

FmtRemotePort returns the remote port as a string

func (*Base) GetConnectionID

func (pkt *Base) GetConnectionID() string

GetConnectionID returns the link ID for this packet.

func (*Base) GetPayload

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

func (pkt *Base) HasPorts() bool

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

func (*Base) Info

func (pkt *Base) Info() *Info

Info returns the packet Info.

func (*Base) IsInbound

func (pkt *Base) IsInbound() bool

IsInbound checks if the packet is inbound.

func (*Base) IsOutbound

func (pkt *Base) IsOutbound() bool

IsOutbound checks if the packet is outbound.

func (*Base) MatchesAddress

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

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

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

SetCtx sets the packet context.

func (*Base) SetInbound

func (pkt *Base) SetInbound()

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

func (*Base) SetOutbound

func (pkt *Base) SetOutbound()

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

func (*Base) SetPacketInfo

func (pkt *Base) SetPacketInfo(packetInfo Info)

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

func (*Base) String

func (pkt *Base) String() string

type IPProtocol

type IPProtocol uint8

IPProtocol represents an IP protocol.

func (IPProtocol) String

func (p IPProtocol) String() string

String returns the string representation (abbreviation) of the protocol.

type IPVersion

type IPVersion uint8

IPVersion represents an IP version.

func (IPVersion) ByteSize

func (v IPVersion) ByteSize() int

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

func (IPVersion) String

func (v IPVersion) String() string

String returns the string representation of the IP version: "IPv4" or "IPv6".

type Info

type Info struct {
	Inbound  bool
	InTunnel bool

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

Info holds IP and TCP/UDP header information

func (*Info) LocalIP

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

LocalIP returns the local IP of the packet.

func (*Info) LocalPort

func (pi *Info) LocalPort() uint16

LocalPort returns the local port of the packet.

func (*Info) RemoteIP

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

RemoteIP returns the remote IP of the packet.

func (*Info) RemotePort

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)
	GetConnectionID() 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

Verdict describes the decision on a packet.

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

Verdicts

func (Verdict) String

func (v Verdict) String() string

String returns the string representation of the verdict.

Documentation was rendered with GOOS=linux and GOARCH=amd64.

Jump to identifier

Keyboard shortcuts

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