...

Package packet

import "github.com/mdlayher/packet"
Overview
Index

Overview ▾

Package packet provides access to Linux packet sockets (AF_PACKET).

type Addr

An Addr is a physical-layer address.

type Addr struct {
    HardwareAddr net.HardwareAddr
}

func (*Addr) Network

func (a *Addr) Network() string

Network returns the address's network name, "packet".

func (*Addr) String

func (a *Addr) String() string

String returns the string representation of an Addr.

type Config

Config contains options for a Conn.

type Config struct {
    // Filter is an optional assembled BPF filter which can be applied to the
    // Conn before bind(2) is called.
    //
    // The Conn.SetBPF method serves the same purpose once a Conn has already
    // been opened, but setting Filter applies the BPF filter before the Conn is
    // bound. This ensures that unexpected packets will not be captured before
    // the Conn is opened.
    Filter []bpf.RawInstruction
}

type Conn

A Conn is an Linux packet sockets (AF_PACKET) implementation of a net.PacketConn.

type Conn struct {
    // contains filtered or unexported fields
}

func Listen

func Listen(ifi *net.Interface, socketType Type, protocol int, cfg *Config) (*Conn, error)

Listen opens a packet sockets connection on the specified interface, using the given socket type and protocol values.

The socket type must be one of the Type constants: Raw or Datagram.

The Config specifies optional configuration for the Conn. A nil *Config applies the default configuration.

func (*Conn) Close

func (c *Conn) Close() error

Close closes the connection.

func (*Conn) LocalAddr

func (c *Conn) LocalAddr() net.Addr

LocalAddr returns the local network address. The Addr returned is shared by all invocations of LocalAddr, so do not modify it.

func (*Conn) ReadFrom

func (c *Conn) ReadFrom(b []byte) (int, net.Addr, error)

ReadFrom implements the net.PacketConn ReadFrom method.

func (*Conn) SetBPF

func (c *Conn) SetBPF(filter []bpf.RawInstruction) error

SetBPF attaches an assembled BPF program to the Conn.

func (*Conn) SetDeadline

func (c *Conn) SetDeadline(t time.Time) error

SetDeadline implements the net.PacketConn SetDeadline method.

func (*Conn) SetPromiscuous

func (c *Conn) SetPromiscuous(enable bool) error

SetPromiscuous enables or disables promiscuous mode on the Conn, allowing it to receive traffic that is not addressed to the Conn's network interface.

func (*Conn) SetReadDeadline

func (c *Conn) SetReadDeadline(t time.Time) error

SetReadDeadline implements the net.PacketConn SetReadDeadline method.

func (*Conn) SetWriteDeadline

func (c *Conn) SetWriteDeadline(t time.Time) error

SetWriteDeadline implements the net.PacketConn SetWriteDeadline method.

func (*Conn) Stats

func (c *Conn) Stats() (*Stats, error)

Stats retrieves statistics about the Conn from the Linux kernel.

Note that calling Stats will reset the kernel's internal counters for this Conn. If you want to maintain cumulative statistics by polling Stats over time, you must do so in your calling code.

func (*Conn) SyscallConn

func (c *Conn) SyscallConn() (syscall.RawConn, error)

SyscallConn returns a raw network connection. This implements the syscall.Conn interface.

func (*Conn) WriteTo

func (c *Conn) WriteTo(b []byte, addr net.Addr) (int, error)

WriteTo implements the net.PacketConn WriteTo method.

type Stats

Stats contains statistics about a Conn reported by the Linux kernel.

type Stats struct {
    // The total number of packets received.
    Packets uint32

    // The number of packets dropped.
    Drops uint32

    // The total number of times that a receive queue is frozen. May be zero if
    // the Linux kernel is not new enough to support TPACKET_V3 statistics.
    FreezeQueueCount uint32
}

type Type

Type is a socket type used when creating a Conn with Listen.

type Type int

Possible Type values. Note that the zero value is not valid: callers must always specify one of Raw or Datagram when calling Listen.

const (
    Raw Type
    Datagram
)